我遇到了 Diffie Hellman 实施的问题。我正在使用此代码 http://www.java2s.com/Tutorial/Java/0490__Security/DiffieHellmanKeyAgreement.htm
这实际上是我正在阅读的一本书的一个例子。但我不明白为什么要generateSecret()
为每个KeyAgreement
. 我注意到该函数会创建不同的键,即使我用相同的KeyAgreement
两次调用它!如果有人有什么建议我会很高兴的!
谢谢你的时间!
我遇到了 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();
...