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

但是,我不完全知道种子的最佳熵源是什么。

所以我很难在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,但没有更多的成功。

    09-27 15:42