无法从相同的随机种子生成相同的密钥对

问题描述:

我正在使用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()); 
+0

标题可以改进。 – 2013-05-02 10:18:07

+0

您的代码示例只生成一个密钥对 - 因此它不会显示您的问题。请调整它,以便您有一个可重现问题的示例代码。 – 2013-05-02 10:38:12

你的代码表明你对于应该如何使用非对称密码有一个基本的误解。您的发件人和收件人应该拥有自己的独立密钥对。然后发件人使用收件人的公钥加密数据。

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

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

+0

是否有任何可能的方法来检索以前生成的相同的私钥和公钥?即使它不安全,对我来说数据并不重要。 – keyanwb 2013-05-02 10:41:03

+0

@ user2342659那么,你现在的方法*会每次产生相同的密钥对。如果你没有得到那个,你在某个地方犯了一个错误。调整您的问题,以包括一个[SSCCE](http://sscce.org/),以显示问题,我们可以进一步提供帮助。 – 2013-05-02 10:45:22

+0

嗨琼斯,相同的键正在窗口中生成。但在Unix中它失败了。也为您的信息字符串“ABCD”是一个DB值。 – keyanwb 2013-05-02 10:48:31