簡體   English   中英

每次JAVA時,Diffie Hellman密鑰協議都會生成不同的密鑰

[英]Diffie Hellman key agreement generates different key every time JAVA

我在Diffie Hellman實施中遇到問題。 我正在使用此代碼http://www.java2s.com/Tutorial/Java/0490__Security/DiffieHellmanKeyAgreement.htm

這實際上是我正在閱讀的一本書中的一個示例。 但是我不明白為什么generateSecret()為每個KeyAgreement創建一個不同的鍵。 我注意到,即使我使用相同的KeyAgreement兩次調用該函數,它也會創建不同的鍵! 如果有人可以提出建議,我將非常高興!

謝謝你的時間!

我認為例子的一部分

private static BigInteger g512 = new BigInteger("1234567890", 16);
private static BigInteger p512 = new BigInteger("1234567890", 16);

完全是假的。 p必須是質數,而g需要是生成器。 當我嘗試運行示例時,出現異常。 似乎是一個更合理的示例(但我自己尚未對其進行測試)。

基本上,DH交換有趣的輸入是( p,g )對,它必須生成並且必須具有一些唯一的屬性。 顯然,上面的示例僅顯示了占位符值,該值不會產生功能正常的算法( p不能等於gp應該是質數,而在該示例中,它顯然可以被10整除)。 我鏈接到的示例顯示了如何使用庫生成正確的( p, g )對。

還值得注意的是,DH參數生成通常是與生成密鑰無關的單獨步驟。 盡管DH參數在某種程度上是私有的,但它們不如您的私有密鑰敏感,並且可以一次生成然后再使用。

(編輯: 示例

AlgorithmParameterGenerator paramGen = AlgorithmParameterGenerator.getInstance("DH");
paramGen.init(512); // number of bits
AlgorithmParameters params = paramGen.generateParameters();
DHParameterSpec dhSpec = params.getParameterSpec(DHParameterSpec.class);

BigInteger p512 = dhSpec.getP();
BigInteger g512 = dhSpec.getG();
int l = dhSpec.getL();
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM