我有一个需求,就是在一个Peer 2 Peer文件共享应用程序中,使用非对称密钥加密(RSA)来确保Java RMI调用的安全。
我参考了 这个但它使用密码口令(对称密钥)对消息进行XOR。我希望客户端用服务器的公钥加密RMI Socket流,服务器用私钥解密Socket输入流。假设。P2P文件共享应用中的每个节点都有对方的公钥。
由于可以有多个客户端-服务器(P2P节点),客户端应该使用相关服务器的公钥来加密socket流数据。
我找不到其他使用非对称密钥来保证RMI调用安全的参考文献。请大家帮忙。
更新一下。
我是一名学生,这是一个大学项目,我必须使用RSA加密技术来保护RMI上发生的通信。所以,我没有任何选择了。
在之前的项目中,我创建了一个Napster & Gnutella风格的P2P文件共享系统。现在的任务是使用RSA来加密节点之间的通信,使用他们的公钥和私钥。
我真的很感谢在这个方向上的任何帮助指导。请不要关闭这个问题。
更新2不需要使用内置库就能实现RSA加密,除了 java.math.BigInteger
和 java.security.SecureRandom
我不知道我是否应该回答自己的问题。
我尝试了许多方法,但我得到的异常和节点不启动。所以,我相信没有一种通用的方法可以通过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调用,包括消息以及文件内容。