BigInteger.probablePrime()与java中的其他primality算法之间的区别

时间:2012-01-05 14:26:42

标签: java encryption cryptography rsa biginteger

我正在使用Java实现RSA加密程序。现在我正在使用BigInteger.probablePrime(1024, rnd)获取素数。此处rnd是由Random rnd = new Random()生成的随机数。 我需要测试各种加密速度。

我的问题是:

  1. BigInteger.probablePrime(1024, rnd)使用什么算法?

  2. 上述算法和其他算法有什么区别:如Rabin-Miller,Fermats,Lucas-Lehmer?

  3. 谢谢。

2 个答案:

答案 0 :(得分:4)

BigInteger可能的素数方法使用Miller-Rabin和Lucas-Lehmer算法来测试素数。

请参阅内部方法BigInteger.primeToCertainty

答案 1 :(得分:2)

Java源代码可供下载,因此您可以自己查看。  以下是BigInteger.probablePrime(int, Random)的代码:

public static BigInteger probablePrime(int bitLength, Random rnd) {

    if (bitLength < 2)
        throw new ArithmeticException("bitLength < 2");

    // The cutoff of 95 was chosen empirically for best performance

    return (bitLength < SMALL_PRIME_THRESHOLD ?
            smallPrime(bitLength, DEFAULT_PRIME_CERTAINTY, rnd) :
            largePrime(bitLength, DEFAULT_PRIME_CERTAINTY, rnd));
}

实际测试包含在smallPrime()largePrime()方法中,后面直接在源代码中。