我希望在java中使用SecureRandom生成随机整数。
private SecureRandom myRandom = new SecureRandom();
private int myInt = 10;
int myResults;
myResults = myRandom.nextInt(myInt);
我知道播种意味着指定随机数生成器的起点。 Shoud我在每次迭代后重新调整随机数生成器以确保随机性?
答案 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