【发布时间】:2015-04-11 23:40:38
【问题描述】:
我编写了一个代码,它能够生成 2048 位素数 p & q,并使用它来加密 RSA 中的消息。我生成这些数字的方法是使用 java.math.BigInteger 包的 probablePrime() 函数。我的问题是这些函数生成的素数在加密方面的加密强度如何。
这是我生成这些数字的代码,isPrime 只是我编写的一个布尔函数,用于检查数字是否为素数。
BigInteger definitePrime(int bits, Random rnd) {
BigInteger prime = new BigInteger("4");
while (!isPrime (prime)) {
prime = BigInteger.probablePrime(bits, rnd);
}
return prime;
}
【问题讨论】:
-
我并不是要怀疑你的编程能力,但你是说你写了一个可以有效测试
BigInteger.probablePrime(2048, new Random())返回的值是否为素数的方法? -
你应该在这里使用 do/while 循环,以避免初始化和冗余的第一次测试。
-
是的,它是一个从 i = 2 开始运行的 for 循环,只要 i 小于数字的平方根,它就会一直持续下去。然后它采用数字 mod i,如果值为零,则返回 false。如果它在没有 num%i 导致为零的情况下通过循环,则返回 true。这是检查数字是否为素数的一种非常有效的方法。
标签: java encryption rsa biginteger