java - 如何在JRE(Java Runtime Environment)中收集熵源?

标签 java random seed

我希望在 JRE 中找到熵源(噪声源)。 (熵源是指PRNG(伪随机数生成器)的种子 Material (或种子)。)

但是,我不知道什么是好的种子熵源。

所以我很难在 JRE 中找到合适的熵源。

你能告诉我这件事吗?

最佳答案

您可以从 JVM 中的不同来源提取熵:

  • 最明显的来源是时钟

    System.currentTimeMillis();
    System.nanoTime();
    
  • 你可以请求空闲内存,它经常变化

    Runtime.getRuntime().freeMemory()
    
  • 也可以使用对象内部的hashCode作为熵

    System.identityHashCode(someObject)
    new Object[0].hashCode()
    
  • 寻找更重的东西,也许最全面的熵源是 MXBeans ,它们有许多属性会随着时间的推移发生不可预测的变化。

    ManagementFactory.getMemoryMXBean()
    ManagementFactory.getThreadMXBean()
    ...
    
  • 最后,你总能生成RandomSecureRandom数字或 random UUIDs , 例如

    new Random().nextLong()        
    new SecureRandom().nextLong()
    UUID.randomUUid()
    

顺便说一句,有人问了完全相同的问题here , 并没有取得太大的成功。

关于java - 如何在JRE(Java Runtime Environment)中收集熵源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43750032/

相关文章:

java - Dagger2 - 项目重建错误 - 字段注入(inject) - Android

java - 如何使 JPA 列仅在 JUnit 测试期间可插入?

c# - 在 C# 中实现 "percent chance"

recursion - 关于递归什么是种子值?

java - Windows 操作系统上 java.security.SecureRandom 的种子

Python的随机: What happens if I don't use seed(someValue)?

java - 使用 selenium 在页面之间导航 - Java

java - 使用 Gradle 构建 Kotlin + Java 9 项目

c# - 随机数生成器安全 : BCryptGenRandom vs RNGCryptoServiceProvider

r - 在数据帧中的一个因子的所有级别中选择 n 个随机采样的连续行