java通过可信服务器交换公钥

java通过可信服务器交换公钥,java,encryption,cryptography,public-key-encryption,Java,Encryption,Cryptography,Public Key Encryption,我想构建一个中继服务器,它可以在两个对等点之间安全地中继消息(用于nat遍历目的),以便进行P2P通信。特别是,我参考了本章图表中交换密钥的步骤 特别是,它说“A的公钥用B的公钥编码”,反之亦然。然而,我偶然发现了一个问题:当我使用两个密钥都是1024位时,当我试图使用公钥对另一个进行编码时,我实际上得到了一个非法BlockSizeException 在阅读其他问题时,一些人回答说,公众可以使用RSA加密的数据大小是有限制的。我可以知道我是否遗漏了一些细节,这些细节在图表中被省略了,或者我做了错

我想构建一个中继服务器,它可以在两个对等点之间安全地中继消息(用于nat遍历目的),以便进行P2P通信。特别是,我参考了本章图表中交换密钥的步骤

特别是,它说“A的公钥用B的公钥编码”,反之亦然。然而,我偶然发现了一个问题:当我使用两个密钥都是1024位时,当我试图使用公钥对另一个进行编码时,我实际上得到了一个
非法BlockSizeException


在阅读其他问题时,一些人回答说,公众可以使用RSA加密的数据大小是有限制的。我可以知道我是否遗漏了一些细节,这些细节在图表中被省略了,或者我做了错误的事情,试图交换密钥……

RSA公钥无法加密长度超过其模的位长度的数据。因此,1024位RSA公钥最多只能加密1024位数据。1024位公钥文件将大于1024位,因为模数只是总数据的一部分。因此,1024位RSA公钥无法加密另一个1024位RSA公钥

更重要的是:您不应该用任何东西加密公钥。公钥就是这样-公开的;当涉及到他们的内容时,没有必要保密。如果您希望“祝福”一个公钥适合某个特定的用途,那么请使用具有某种意义的私钥对其进行签名。或者更好的方法是,从协议的所有参与者都信任的证书颁发机构为公钥颁发证书