Java 作为序列化对象交换公钥

Java 作为序列化对象交换公钥,java,cryptography,public-key,public-key-encryption,Java,Cryptography,Public Key,Public Key Encryption,如何将公钥交换到客户端。我加密了一个文档(文本文件)通过使用私钥使用RSA算法,然后使用序列化将公钥作为java.security.key对象存储在文件中。我想知道序列化公钥对象的完整性,无论它是安全选项还是任何其他可用选项。公钥通常只是作为一段文本进行交换。然后将其导入密钥库。具体的方法取决于实现(我一直使用PGP) 我不会将密钥公开为java.security.key的序列化形式,因为它不是真正的标准。它的简单形式的关键是交换的标准形式 将密钥公开为下载:它是公开的,因此入侵者下载您的密钥是

如何将公钥交换到客户端。我加密了一个文档(文本文件)通过使用私钥使用RSA算法,然后使用序列化将公钥作为java.security.key对象存储在文件中。我想知道序列化公钥对象的完整性,无论它是安全选项还是任何其他可用选项。

公钥通常只是作为一段文本进行交换。然后将其导入密钥库。具体的方法取决于实现(我一直使用PGP)

我不会将密钥公开为java.security.key的序列化形式,因为它不是真正的标准。它的简单形式的关键是交换的标准形式

将密钥公开为下载:它是公开的,因此入侵者下载您的密钥是无能为力的。唯一可能出错的是,有人可能伪造您的服务器并托管不同的密钥。然后用该密钥的私钥签名并声称是您。当然,如果你把它寄给别人,你也会有同样的问题。但至少你会知道你把它寄给了谁

最安全的方法是将钥匙散开。就像在U盘上一样


取决于您的原因,我认为您可以承受风险。

Joeri已经回答了安全方面的问题-我没有任何补充

您可能遇到的主要问题是在库版本之间更改序列化表示,这是使用Java序列化时的一个潜在问题


当然还有其他的方法。RSA公钥应具有行业标准编码,您可以使用
getEncoded()
方法访问该编码。这将为您提供一个字节数组,您可以
将其写入
文件输出流
。所以这真的很容易。

这是真的,但要想真正有用:既然我有编码的字节,我怎么能再次从它们构造公钥?答案似乎在X509EncodedKeySpec中-我想你可能想在答案中包含这一点。示例代码可在