关于安全性:在Java中的范围内统一生成安全随机数

Generate secure random number uniformly over a range in Java

如何在一个范围内生成安全的统一随机数?范围可以在0到100之间。(上限不是2的幂)。

java.security.SecureRandom似乎提供了0..2^n的范围。


你可以的

1
2
3
Random rand = new SecureRandom()
// 0 to 100 inclusive.
int number = rand.nextInt(101);

1
2
// 0 inclusive to 100 exclusive.
int number = rand.nextInt(100);

注意:这比(int) (rand.nexDouble() * 100)更有效,因为nextdouble()需要创建至少53位的随机性,而nextdint(100)创建的随机性小于7位。


尝试以下代码捕捉

1
2
3
4
5
6
    SecureRandom random = new SecureRandom();

    int max=50;
    int min =1;

    System.out.println(random.nextInt(max-min+1)+min);