[英]Diffie Hellman Key Agreement using optional subprime q with DHParameterSpec in Java
[英]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
不能等於g
, p
應該是質數,而在該示例中,它顯然可以被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.