Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用非对称密钥加密保护JavaRMI_Java_Rsa_Rmi_Socketfactory - Fatal编程技术网

使用非对称密钥加密保护JavaRMI

使用非对称密钥加密保护JavaRMI,java,rsa,rmi,socketfactory,Java,Rsa,Rmi,Socketfactory,我需要在对等2文件共享应用程序中使用非对称密钥加密(RSA)保护Java RMI调用 我提到了,但它使用密码短语(对称密钥)对消息进行异或。我希望客户端使用服务器的公钥加密RMI套接字流,服务器应该使用其私钥解密套接字输入流。 假设:P2P文件共享应用程序中的每个节点都有彼此的公钥 由于可以有多个客户端服务器(P2P节点),因此客户端应该使用相关服务器的公钥来加密套接字流数据 我找不到使用非对称密钥保护RMI调用的任何其他引用。请帮忙 更新: 我是一名学生,这是一个大学项目,我必须使用RSA加密

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

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

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

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

更新:

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

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

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

更新2
除了
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。它符合你的要求