使用非对称密钥加密保护JavaRMI
我需要在对等2文件共享应用程序中使用非对称密钥加密(RSA)保护Java RMI调用 我提到了,但它使用密码短语(对称密钥)对消息进行异或。我希望客户端使用服务器的公钥加密RMI套接字流,服务器应该使用其私钥解密套接字输入流。 假设:P2P文件共享应用程序中的每个节点都有彼此的公钥 由于可以有多个客户端服务器(P2P节点),因此客户端应该使用相关服务器的公钥来加密套接字流数据 我找不到使用非对称密钥保护RMI调用的任何其他引用。请帮忙 更新: 我是一名学生,这是一个大学项目,我必须使用RSA加密技术保护RMI上发生的通信。所以,我别无选择 在以前的项目中,我创建了一个Napster&Gnutella风格的P2P文件共享系统。现在的任务是使用RSA加密节点之间使用其公共-私有密钥的通信 我非常感谢在这方面的任何帮助/指导。请不要结束这个问题 更新2使用非对称密钥加密保护JavaRMI,java,rsa,rmi,socketfactory,Java,Rsa,Rmi,Socketfactory,我需要在对等2文件共享应用程序中使用非对称密钥加密(RSA)保护Java RMI调用 我提到了,但它使用密码短语(对称密钥)对消息进行异或。我希望客户端使用服务器的公钥加密RMI套接字流,服务器应该使用其私钥解密套接字输入流。 假设:P2P文件共享应用程序中的每个节点都有彼此的公钥 由于可以有多个客户端服务器(P2P节点),因此客户端应该使用相关服务器的公钥来加密套接字流数据 我找不到使用非对称密钥保护RMI调用的任何其他引用。请帮忙 更新: 我是一名学生,这是一个大学项目,我必须使用RSA加密
除了
java.math.BigInteger
和java.security.SecureRandom
我不知道是否应该回答我自己的问题,在不使用内置库的情况下实现RSA加密
我尝试了很多方法,但是我遇到了异常,节点没有启动。因此,我相信在我的情况下,没有一种通用的方法可以通过RSA加密来保护RMI通信
所以,我尝试了一种不同的方法
我将接口和实现中RMI方法的方法签名从
public void query(MessageID messageID, long TTL, String fileName, String upstreamIP) throws RemoteException
到
现在,在每次RMI调用之前,我将参数转换为自定义对象,然后转换为字节,使用发送方的私钥应用RSA加密,将其转换为加密字节,然后将其传递给服务器
在服务器端,收集字节,使用发送方的RSA公钥对其解密,然后转换到自定义对象,提取信息,最后传递到业务逻辑。此过程在每次RMI调用时完成
这类似于套接字,我们将所有内容写入流。最后,在RMI调用中,我们传递的对象被转换成字节。所以,使用这种方法,我显式地将它们转换为字节,然后应用加密并通过RMI传递。通过网络,它将作为加密字节传输。这将适用于所有RMI呼叫,包括消息和文件内容。我不知道是否应该回答我自己的问题 我尝试了很多方法,但是我遇到了异常,节点没有启动。因此,我相信在我的情况下,没有一种通用的方法可以通过RSA加密来保护RMI通信 所以,我尝试了一种不同的方法 我将接口和实现中RMI方法的方法签名从
public void query(MessageID messageID, long TTL, String fileName, String upstreamIP) throws RemoteException
到
现在,在每次RMI调用之前,我将参数转换为自定义对象,然后转换为字节,使用发送方的私钥应用RSA加密,将其转换为加密字节,然后将其传递给服务器
在服务器端,收集字节,使用发送方的RSA公钥对其解密,然后转换到自定义对象,提取信息,最后传递到业务逻辑。此过程在每次RMI调用时完成
这类似于套接字,我们将所有内容写入流。最后,在RMI调用中,我们传递的对象被转换成字节。所以,使用这种方法,我显式地将它们转换为字节,然后应用加密并通过RMI传递。通过网络,它将作为加密字节传输。这将适用于所有RMI调用,包括消息和文件内容。您必须实现自己的
RMIClientSocketFactory
和rmiserverssocketfactory
,或者对每个参数和结果使用SealedObject
。如何更新客户端套接字工厂,以便每次使用所需的服务器公钥加密流?我无法想象。您可以建议吗?您必须以某种方式将服务器的公钥脱机分发给客户端,最好是在其证书内。但我不知道为什么你不象其他人一样只使用TLS。使用RMI vai SSL/TLS和基于证书的客户端身份验证怎么样?无意冒犯,但根据你的问题,你还没有足够的专家来进行自己的验证。虽然这样做会带来很多痛苦和不安全,但绝不应该像您建议的那样使用非对称加密来加密批量数据。我会说使用混合加密,但正如其他人所指出的,这是一个已解决的问题:在SSL/TLS上使用RMI。它满足您的要求,也是一个简单的按钮。您必须实现自己的RMIClientSocketFactory
和rmiserverssocketfactory
,或者对每个参数和结果使用SealedObject
。如何更新客户端套接字工厂,以便每次使用所需的服务器公钥加密流?我无法想象。您可以建议吗?您必须以某种方式将服务器的公钥脱机分发给客户端,最好是在其证书内。但我不知道为什么你不象其他人一样只使用TLS。使用RMI vai SSL/TLS和基于证书的客户端身份验证怎么样?无意冒犯,但根据你的问题,你还没有足够的专家来进行自己的验证。虽然这样做会带来很多痛苦和不安全,但绝不应该像您建议的那样使用非对称加密来加密批量数据。我会说使用混合加密,但正如其他人所指出的,这是一个已解决的问题:在SSL/TLS上使用RMI。它符合你的要求