【问题标题】:seeding secure random in java在java中播种安全随机
【发布时间】:2012-01-30 23:24:49
【问题描述】:

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

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

我了解播种意味着指定随机数生成器的起点。我是否应该在每次迭代后重新设置随机数生成器以确保随机性?

【问题讨论】:

    标签: security random numbers generator


    【解决方案1】:

    没有。如果您第一次没有提供种子,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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 2013-12-06
    • 2016-08-12
    • 1970-01-01
    • 2015-05-10
    • 2010-10-05
    相关资源
    最近更新 更多