如何找到比另一个随机BigInteger小的随机BigInteger?

时间:2014-12-12 21:05:27

标签: rsa random java

如何选择随机元素α∈Z* p? P是一个随机的1024位素数BigInteger。

以下是我如何找到BigInteger p:

Random rand = new Random(new Date().getTime());

BigInteger p= new BigInteger(1024, rand);

while(!p.isProbablePrime(3))
    {
       BigInteger p= new BigInteger(1024, rand);
    }

提前致谢。

2 个答案:

答案 0 :(得分:1)

我认为这是Java。在这种情况下,您实际上并没有选择1024位素数。您正在选择介于0和$ 2 ^ {1024} $之间的素数。看一下API。有一个静态方法叫做probableprime,它会给你一个给定位长的可能素数。

现在,在Z_p $中对$ a \的数字进行采样,您可以使用之前使用的方法对0到$ 2 ^ {1024} $之间的随机数$ r $进行采样。然后检查$ r< P $。如果没有重新计算$ r $,直到你获得$ r< P $。这称为拒绝抽样,在这种情况下应该合理有效。

但是,您应该确保Java使用的随机性足以满足您的目的。

答案 1 :(得分:0)

我想你在实践中可能需要的是一个随机的k位素数(参见Guut Boy的回答)。 Maurer发布了一种生成这样一个素数的算法,该算法可以证明"素(与通过米勒 - 拉宾测试获得的素相反)。我有一个Maurer算法的Python实现,可在http://s13.zetaboards.com/Crypto/topic/7234475/1/

获得