Java中真正的随机生成
我正在阅读Math.random()javadoc,发现随机只是伪善。
有没有一个库(特别是java)可以根据环境温度,CPU温度/电压或类似的随机变量生成随机数?
我正在阅读Math.random()javadoc,发现随机只是伪善。
有没有一个库(特别是java)可以根据环境温度,CPU温度/电压或类似的随机变量生成随机数?
RANDOM.ORG 是一个真正的随机数服务,通过大气噪声生成随机性。
可以在此处找到用于与之接口的Java库:http://sourceforge.net/projects/trng-random-org/
你的问题模棱两可,这导致答案到处都是。
如果你正在寻找一个依赖于系统随机性来源的 Random 实现(正如我猜测的那样),那么 java.security.SecureRandom 就是这样做的。java.security 文件中 Sun 安全提供程序的默认配置具有以下各项:
#
# Select the source of seed data for SecureRandom. By default an
# attempt is made to use the entropy gathering device specified by
# the securerandom.source property. If an exception occurs when
# accessing the URL then the traditional system/thread activity
# algorithm is used.
#
# On Solaris and Linux systems, if file:/dev/urandom is specified and it
# exists, a special SecureRandom implementation is activated by default.
# This "NativePRNG" reads random bytes directly from /dev/urandom.
#
# On Windows systems, the URLs file:/dev/random and file:/dev/urandom
# enables use of the Microsoft CryptoAPI seed functionality.
#
securerandom.source=file:/dev/urandom
如果您真的要求用更真实随机的东西覆盖它,可以通过更改此属性或使用另一个SecureRandom来完成。例如,您可以使用由 HSM 模块(如 nCipher nShield)支持的 JCE 提供程序,它有自己的 PRNG,或者线程中提到的其他解决方案。