使用SecureRandom和BigInteger创建随机数

时间:2014-11-15 21:15:58

标签: java range biginteger

基本上我使用randNo = BigInteger.probablePrime(1024,r)生成了一个随机的1024位数。但是,现在我想使用BitInteger randNo创建另一个随机数,其中randNo具有最大值,2为最小值,即从2到randNo的随机数。

关于如何实现这一目标的任何想法?不确定是否需要某种转换为字节才能传递给securerandom。

任何帮助都将受到高度赞赏。

谢谢,

萨姆

1 个答案:

答案 0 :(得分:0)

这是我想到的一种创造性方式

BigInteger nextRandNo = new BigInteger(randNo).minus(BigInteger.valueOf(2L));
for(int i = 0; i < randNo.bitLength(); i++)
{
    if(r.nextBoolean())
        nextRandNo = nextRandNo.flipBip(i);
}
nextRandNo = nextRandNo.plus(BigInteger.valueOf(2L));

它可能不是世界上最快的东西,但它会确保每一位得到一点熵,它应该会给你一个介于2和BigInteger值之间的BigInteger:)