2010-08-17 59 views
3

我們實施的Diffie-Hellman密鑰交換算法:什麼metod KeyAgreement.generateSecret(String algorithm)呢?

KeyAgreement aKeyAgree = KeyAgreement.getInstance("DH"); 

keyAgreement.init(myPrivateKey); 
keyAgreement.doPhase(otherPublicKey) 

現在,我們需要生成一個祕密使用AES加密。有方法generateSecret(String algorithm)。我想我應該用'AES'的說法來調用它。

但是對於DH我使用512位長度的公鑰,所以密鑰也應該是512位長度。但是,AES允許最多256位長度的密鑰。無參數的普通方法generateSecret()返回512位DH祕密。但是generateSecret(String)呢?它如何將512位密鑰轉換爲256/128位AES密鑰?

+0

DH需要大約與RSA密鑰一樣長的密鑰。因此使用長度至少爲1024位的密鑰。從生成的DH祕密通過使用散列函數(例如SHA-256)生成AES密鑰。 – abc 2010-08-18 14:05:07

回答

0

此方法只截斷generatedSecret()。

4

Diffie-Hellman是一個重要的協議協議; AES是一種對稱加密算法。

無參數generateSecret()調用爲密鑰協議算法提供了默認大小的密鑰。將算法名稱傳遞給generateSecret將爲您提供適合您算法的適當大小的密鑰(即縮短爲AES的256位)。

我找到了一個顯示示例的頁面。

http://www.exampledepot.com/egs/javax.crypto/KeyAgree.html

我希望你可以只更換「DES」的例子與「AES」或者你想使用的任何對稱密鑰算法。

+0

我首先用Diffie-Hellman算法生成共享密鑰,然後使用生成的密鑰用AES加密數據。 – 2010-08-17 14:35:05

+0

我不試圖用另一個替換。我只是試圖結合使用它們。 – 2010-08-17 14:35:43

+0

你知道了嗎? – 2010-08-18 13:13:02