无法从相同的随机种子生成相同的密钥对
我正在使用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());
你的代码表明你对于应该如何使用非对称密码有一个基本的误解。您的发件人和收件人应该拥有自己的独立密钥对。然后发件人使用收件人的公钥加密数据。
你在做什么是使用固定字符串在两个位置生成相同的密钥对。这是不安全的,因为你已经将你的密钥空间从512位(这已经太小 - 至少使用 1024位)减少到与(可能短的)字符串相关的熵。
如果您希望有一个用于在两端派生密钥的“密码”字符串,请使用对称算法(例如AES)和密码派生函数(例如PBKDF2)。
是否有任何可能的方法来检索以前生成的相同的私钥和公钥?即使它不安全,对我来说数据并不重要。 – keyanwb 2013-05-02 10:41:03
@ user2342659那么,你现在的方法*会每次产生相同的密钥对。如果你没有得到那个,你在某个地方犯了一个错误。调整您的问题,以包括一个[SSCCE](http://sscce.org/),以显示问题,我们可以进一步提供帮助。 – 2013-05-02 10:45:22
嗨琼斯,相同的键正在窗口中生成。但在Unix中它失败了。也为您的信息字符串“ABCD”是一个DB值。 – keyanwb 2013-05-02 10:48:31
标题可以改进。 – 2013-05-02 10:18:07
您的代码示例只生成一个密钥对 - 因此它不会显示您的问题。请调整它,以便您有一个可重现问题的示例代码。 – 2013-05-02 10:38:12