【发布时间】:2016-07-05 05:31:58
【问题描述】:
我正在尝试制作一个程序,该程序使用 RSA 加密来加密和解密发送到和从多台计算机发送的数据。我有一个文件夹,用于在我的计算机上存储其他计算机的公钥。但是,我似乎无法加载此密钥文件并创建一个指向它的 publicKey 对象。我目前的尝试如下所示,但我想知道其他人使用什么方法来做到这一点?
//Returns the key of a friend (given as input)
public PublicKey getFriendsKey(String friend){
try{ObjectInputStream friendsKeyInput = new ObjectInputStream(new fileInputStream(programLocation + "/Text Files/encryptionKeys/" + friend + "PublicKey.key"));
PublicKey friendsKey = friendsKeyInput.readObject();
}
catch(Exception e){e.printStackTrace();}
return friendsKey;
}
【问题讨论】:
-
您是否了解数据长度仅限于密钥长度并且比对称密码慢 100 到 1000 倍?该数据通常使用对称算法(如 AES)加密?
-
@zaph:实际上密钥长度减去至少 11 个八位字节用于填充/随机化,尽管现在密钥大多(必须是)至少 2048 位 = 256 八位字节,这相对不太重要。 OP:告诉我们文件是如何生成的,和/或发布一个示例文件(或几个,如果它们不完全相似);如果不是文本,请使用十六进制转储。
-
@dave_thompson_085 我知道,但为了避免争论(我在这里失败了),我小心地说“限制在密钥长度”,这是真的。如果我考虑到填充,我会因为原始数据功能而受到抨击。在我的评论中,我想指出非对称加密的数据大小是有限制的,这似乎是相关的,因为 OP 声明的文件可能大于密钥大小 - 填充 - 无论如何,我不想进入填充问题。
标签: java encryption key rsa