在java中播种安全随机

时间:2011-12-31 05:45:03

标签: security random numbers generator

我希望在java中使用SecureRandom生成随机整数。

private SecureRandom myRandom = new SecureRandom();
private int myInt = 10;
int myResults;
myResults = myRandom.nextInt(myInt);

我知道播种意味着指定随机数生成器的起点。 Shoud我在每次迭代后重新调整随机数生成器以确保随机性?

1 个答案:

答案 0 :(得分:2)

没有。如果你没有第一次提供种子,SecureRandom将自行播种,如果它使用伪随机生成器,后续的随机数将是不可预测的。

事实上,如果你尝试重新设置它,你可能会降低生成的随机数的安全性,因为你必须从某个地方获得新的种子(这可能不会是一个很好的来源)随机性作为SecureRandom的实现)。

根据https://www.synopsys.com/blogs/software-security/proper-use-of-javas-securerandom/,如果您使用SecureRandom获取个随机数,则应定期重新设置,以便

  

定期丢弃现有的java.security.SecureRandom   实例并创建一个新的。这将生成一个新实例   新种子。

     

通过拨打电话,定期向PRNG种子添加新的随机材料   java.security.SecureRandom.setSeed(java.security.SecureRandom.generateSeed(INT))。

不会在每次通话后重新播放它。

请注意SecureRandom的API将在Java 8中阐明:http://openjdk.java.net/jeps/123