gpt4 book ai didi

java - Diffie Hellman key agreement 每次JAVA生成不同的key

转载 作者:行者123 更新时间:2023-11-29 07:14:25 24 4
gpt4 key购买 nike

我在执行 Diffie Hellman 时遇到问题。我正在使用这段代码 http://www.java2s.com/Tutorial/Java/0490__Security/DiffieHellmanKeyAgreement.htm

它实际上是我正在阅读的一本书中的一个例子。但我不明白为什么 generateSecret() 为每个 KeyAgreement 创建一个不同的 key 。我注意到即使我用相同的 KeyAgreement 调用它两次,该函数也会创建不同的 key !如果有人有什么建议,我将非常高兴!

感谢您的宝贵时间!

最佳答案

我认为例子的部分

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

完全是假的。 p 需要是质数,g 需要是生成器。当我尝试运行示例时出现异常。 This 似乎是一个更合理的例子(但我自己还没有测试过)。

基本上,DH 交换的有趣输入是需要生成的 (p,g) 对,它必须具有一些独特的属性。显然,上面的示例仅显示不会产生正确运行算法的占位符值(p 不能等于 gp 应该是质数,而在示例中它可以被 10 整除)。我链接到的示例显示了如何使用库生成正确的 (p, g) 对。

还值得注意的是,DH 参数生成通常与生成 key 分开进行。虽然 DH 参数有些私密,但它们不像您的私钥那么敏感,可以生成一次然后重复使用。

(编辑:Example)

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();
...

关于java - Diffie Hellman key agreement 每次JAVA生成不同的key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10891119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com