3

我正在使用 java 密码学来生成公钥和私钥。我String.getBytes()用来生成它。但是在解密时,我使用相同String.getBytes()的方法来获取密钥。但我没有得到与以前相同的密钥。请帮忙。下面是代码示例。

KeyPairGenerator keyGenerator = KeyPairGenerator.getInstance("RSA");
SecureRandom ss = null;
ss = new SecureRandom("ABCD".getBytes(UNICODE_FORMAT));
keyGenerator.initialize(512, ss);
KeyPair myKeyPair = keyGenerator.generateKeyPair();   

System.out.println(myKeyPair.getPrivate());
System.out.println(myKeyPair.getPublic());
4

1 回答 1

2

您的代码表明您对应该如何使用非对称加密存在根本性的误解。您的发送者和接收者应该有自己的、独立的密钥对。然后,发送者使用接收者的公钥加密数据。

您正在做的是使用固定字符串在两个位置生成相同的密钥对。这并不安全,因为您已将密钥空间从 512 位(这已经太小 -至少使用1024 位)减少到与(可能很短的)字符串相关的熵。

如果您希望使用“密码”字符串在两端派生密钥,则使用对称算法(例如 AES)和密码派生函数,例如 PBKDF2。

于 2013-05-02T10:31:01.980 回答