如何选择随机元素α∈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);
}
提前致谢。
答案 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/
获得