我试图找到一个小于1024位的生成器。
p是一个随机的1024位素数。
q是一个随机的160位素数,它将p-1分开。
我已经找到了p和q的值。但是生成器总是最终为0或1。
非常感谢帮助。
BigInteger alpha=new BigInteger(1022,rand);//finding a biginteger smaller than 1024 bits
BigInteger modInverseQ= q.modInverse(p); // (q^-1) mod(p)
BigInteger y = p.subtract(one); //p-1
BigInteger z = y.multiply(modInverseQ); //(p-1)*(q^-1)
BigInteger g = alpha.modPow(z, p); // a^(p-1)*(q^-1) mod(p)
int comp = g.compareTo(one); // checking if generator is equal to 1
while(comp == 0) //if generator is 1 find a new generator
{
alpha=new BigInteger(1022,rand);
g = alpha.modPow(z, p);
comp = g.compareTo(one);
}
答案 0 :(得分:0)
您可以查看以下类的实现:org.bouncycastle.crypto.generators.DSAParametersGenerator
。
这是一类Bouncy Castle(https://www.bouncycastle.org/java.html),一个Java加密提供者。
在其中,有几种私有方法可能对您需要的内容非常有用。