Security java中的安全随机种子设定

Security java中的安全随机种子设定,security,random,numbers,generator,Security,Random,Numbers,Generator,我希望在java中使用SecureRandom生成随机整数 private SecureRandom myRandom = new SecureRandom(); private int myInt = 10; int myResults; myResults = myRandom.nextInt(myInt); 我理解播种意味着为随机数生成器指定一个起点。我应该在每次迭代后重新设定随机数生成器的种子以确保随机性吗?否。如果第一次不提供种子,SecureRandom将自动进行种子设定,如果它使

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

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

我理解播种意味着为随机数生成器指定一个起点。我应该在每次迭代后重新设定随机数生成器的种子以确保随机性吗?

否。如果第一次不提供种子,SecureRandom将自动进行种子设定,如果它使用伪随机生成器,后续的随机数将无法预测

事实上,如果您尝试对其重新设定种子,可能会降低生成的随机数的安全性,因为您必须从某处获取新种子(而这可能不会像SecureRandom的实现那样成为良好的随机性来源)

根据,如果您使用SecureRandom处理大量的随机数,则应定期对其重新设定种子,因此

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

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

但不要在每次通话后重新设定


请注意,
SecureRandom
的API将在Java8中澄清:

这个答案显然是错误的。在某些情况下,重新播种更安全@Jacab谢谢你的意见。。。我已经更新了我的答案,引用的文章已移至