1

我需要在 Peer 2 Peer File 共享应用程序中使用非对称密钥加密 (RSA) 保护 Java RMI 调用。

我提到了这个,但它使用密码(对称密钥)来异或消息。我希望客户端使用服务器的公钥加密 RMI 套接字流,并且服务器应该使用其私钥来解密套接字输入流。假设:P2P文件共享应用中的每个节点都有彼此的公钥

由于可以有多个客户端-服务器(P2P 节点),客户端应该使用相关服务器的公钥来加密套接字流数据。

我找不到任何其他使用非对称密钥来保护 RMI 调用的参考。请帮忙。

更新:

我是一名学生,这是一个大学项目,我必须使用 RSA 加密来保护通过 RMI 进行的通信。所以,我别无选择。

在之前的项目中,我创建了一个 Napster & Gnutella 风格的 P2P 文件共享系统。现在的任务是使用 RSA 使用它们的公私钥加密节点之间的通信。

我非常感谢这方面的任何帮助/指导。请不要关闭这个问题。

更新 2 在不使用内置库的情况下实施 RSA 加密,除了java.math.BigIntegerjava.security.SecureRandom

4

1 回答 1

0

我不知道我是否应该回答我自己的问题。

我尝试了很多方法,但我遇到了异常并且节点没有启动。因此,我相信对于我的情况,没有一种通用的方法可以通过 RSA 加密来保护 RMI 通信。

所以,我尝试了不同的方法。

我更改了接口和实现中 RMI 方法的方法签名

public void query(MessageID messageID, long TTL, String fileName, String upstreamIP) throws RemoteException

public void query(byte[] bytes) throws RemoteException

现在,在每次 RMI 调用之前,我将参数转换为自定义对象,然后转换为字节,使用发送者的私钥应用 RSA 加密以转换为加密字节,然后将其传递给服务器。

在服务器端,收集字节,使用发送者的 RSA 公钥解密,然后转换为自定义对象,提取信息,最后传递给业务逻辑。这个过程在每个 RMI 调用上完成。

这类似于套接字,我们将所有内容都写入流中。最终,在 RMI 调用中,我们传递的对象被转换为字节。因此,使用这种方法,我明确地将它们转换为字节,然后应用加密并通过 RMI 传递它。通过网络,它将作为加密字节传输。这将适用于包括消息和文件内容的所有 RMI 调用。

于 2020-05-04T21:50:25.933 回答