DSA(数字签名算法)实施-密钥生成

时间:2018-12-14 13:10:02

标签: java cryptography dsa

我必须为大学实施DSA,发现数字 q 时遇到问题,该数字是 p-1 的素数,其中p是素数。我试图编写一些怪异的循环,但它仅适用于较小的 p 值。我猜用512位长素数会花很多时间。 我使用Java和BigInteger库实现。

编辑:

   public BigInteger[] generatePAndQ(){

    BigInteger q = BigInteger.probablePrime(160, new Random());
    BigInteger k = BigInteger.valueOf(2); // k = 2

    BigInteger probablyPrime = q.multiply(k).add(BigInteger.ONE); // probablyPrime = q * k + 1
    while(!isPrime(probablyPrime)){
        q = BigInteger.probablePrime(160, new Random());
        probablyPrime = q.multiply(k).add(BigInteger.ONE);
    }

    BigInteger[] qAndP = new BigInteger[2];
    qAndP[0] = q;
    qAndP[1] = probablyPrime;

    return  qAndP;
}

1 个答案:

答案 0 :(得分:2)

我不确定您在做什么,但是这段代码说明了我的评论。通常,它在笔记本电脑上的运行时间不到0.5秒。

plot2d

q,p和k的边界又快又脏,应该清理。