2013-05-02 100 views
2

我正在使用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

回答

2

你的代碼表明你對於應該如何使用非對稱密碼有一個基本的誤解。您的發件人和收件人應該擁有自己的獨立密鑰對。然後發件人使用收件人的公鑰加密數據。

你在做什麼是使用固定字符串在兩個位置生成相同的密鑰對。這是不安全的,因爲你已經將你的密鑰空間從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

相關問題