[英]Nothing happens when running my code [BigInteger]
所以我有一个可以计算两个素数的类,然后检查它们是否为素数
import java.util.*;
import java.math.*;
public class GeneratePrime{
public static BigInteger calculatePPrime() {
BigInteger pRandom;
while (true) {
pRandom = new BigInteger(512, new Random());
pRandom = pRandom.setBit(0);
if(isPrime(pRandom)){
System.out.println("Got Random Prime P: "+pRandom);
break;
}
}
return pRandom;
}
public static BigInteger calculateQPrime() {
BigInteger qRandom;
while(true){
qRandom = new BigInteger(512, new Random());
if(isPrime(qRandom)){
System.out.println("Got Random Prime Q: "+qRandom);
break;
}
}
return qRandom;
}
public static boolean isPrime(BigInteger number) {
if (!number.isProbablePrime(5))
return false;
BigInteger two = new BigInteger("2");
if (!two.equals(number) && BigInteger.ZERO.equals(number.mod(two)))
return false;
for (BigInteger i = new BigInteger("3"); i.multiply(i).compareTo(number) < 1; i = i.add(two)) {
if (BigInteger.ZERO.equals(number.mod(i)))
return false;
}
return true;
}
}
这或多或少是我在互联网上发现的东西的综合体。 此类最初不使用任何BigIntegers,但是后来我发现我必须使用它进行分配,因此我必须抓紧所有内容并执行此操作。
无论如何。 我无法使用任何内置函数来计算素数(即使有,也可以使用idk)。 我的问题是,当我在以下位置运行此代码时:
import java.util.*;
import java.math.*;
public class RSA{
public static void main(String[] args) {
BigInteger p, q;
GeneratePrime gp = new GeneratePrime();
p = gp.calculatePPrime();
q = gp.calculateQPrime();
}
}
两个类都可以正常编译,但是当我运行RSA类时,什么也没发生。 没有错误就没有。 我的终端只是空白。 有人知道为什么吗? 还是有人可以看到此代码是否在他们的计算机上工作? 我知道我可能在这里错过了一些愚蠢的东西。 谢谢
您想获得随机素数吗? 然后在代码中明确说明:
public BigInteger randomPrime(int bits, Random random) {
return new BigInteger(bits, random).nextProbablePrime();
// or
// return BigInteger.probablePrime(bits, random);
}
在这种情况下,请使用您可以使用的方法: nextProbablePrime()
。 这种方法比您编写的方法集要高效得多。 这将大大提高您的应用程序。
然后,您的RSA类可以成为:
import java.util.*;
import java.math.*;
public class RSA{
public static void main(String[] args) {
BigInteger p, q;
GeneratePrime gp = new GeneratePrime();
Random random = new Random();
int bits = 512;
p = gp.randomPrime(bits, random);
q = gp.randomPrime(bits, random);
}
}
如果您愿意使用512
位数字,并且希望随机获得它,并希望它是素数。 您的解决方案将不会成功。 这是太大的价值,无法用太多的可能性来处理。 即使可以certainty
使用BigInteger
构造函数。像这样:
new BigInteger(int bitLength, int certainty, Random random);
Java文档说:
certainty
-呼叫者愿意容忍的不certainty
的度量。 新的BigInteger表示质数的概率将超过(1-1 /(2 确定性 ))。
certainty
越大,该数字不是素数的概率就越小。
仍然不会帮助您。 如果随机数不是@OlivierGrégoire建议的质数,或者只是减少位数,则可以考虑只取下一个质数。
新的BigInteger的最大bitLength的值非常大。 如果将其减少到较小的数目,它将起作用。 我指的是下面的代码中的值512。 尝试使用12之类的小数字。
pRandom = new BigInteger(512, new Random());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.