1

我正在尝试执行 Diffie Hellman Hey 协议,作为参数定义的一部分,我有 3 个值:

一个素数模 p 一个基生成器 g 一个子素数 q

查看用于创建执行此协议所需的密钥的各种构造函数,我似乎无法设置 q 值:

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/javax/crypto/spec/DHParameterSpec.html

DHParameterSpec​(BigInteger p, BigInteger g)
使用素数模 p 和基础生成器 g 为 Diffie-Hellman 构造参数集。DHParameterSpec​(BigInteger p, BigInteger g, int l)
使用素数模 p、基生成器 g 和随机指数(私有值)的比特大小 l 为 Diffie-Hellman 构造参数集。

https://docs.oracle.com/javase/9​​/docs/api/javax/crypto/spec/DHPublicKeySpec.html

DHPublicKeySpec​(BigInteger y, BigInteger p, BigInteger g)
采用公共值 y、素数模 p 和基生成器 g 的构造函数。

https://docs.oracle.com/javase/9​​/docs/api/javax/crypto/spec/DHPrivateKeySpec.html

DHPrivateKeySpec​(BigInteger x, BigInteger p, BigInteger g)
采用私有值 x、素数模 p 和基生成器 g 的构造函数。

现在,我知道 Bouncy Castle 有一个支持这个的实现:

https://people.eecs.berkeley.edu/~jonah/bc/org/bouncycastle/crypto/params/DHParameters.html

但我不能使用充气城堡。

有没有办法将 DHParameterSpec/DHPublicKey/DHPrivateKey 与我缺少的 q 值一起使用?

4

1 回答 1

0

使用 DSA BigInteger getG() 返回基数 g。BigInteger getP() 返回素数 p。BigInteger getQ() 返回子素数 q。 https://docs.oracle.com/javase/7/docs/api/java/security/spec/DSAParameterSpec.html

于 2021-09-28T00:12:28.397 回答