我正在使用Java实现RSA加密程序。现在我正在使用BigInteger.probablePrime(1024, rnd)
获取素数。此处rnd
是由Random rnd = new Random()
生成的随机数。
我需要测试各种加密速度。
我的问题是:
BigInteger.probablePrime(1024, rnd)
使用什么算法?
上述算法和其他算法有什么区别:如Rabin-Miller,Fermats,Lucas-Lehmer?
谢谢。
答案 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()
方法中,后面直接在源代码中。