按照文件,java.util.Random的是不是真正的随机数发生器。
从下面的链接: http://docs.oracle.com/javase/7/docs/api/java/util/Random.html ,它已被引述
这个类的一个实例用于生成伪随机数流。 类使用一个48位的种子,这是使用线性同余式修改。
我要实现真随机数发生器。 请提出任何编程语言或Java中的替代品
按照文件,java.util.Random的是不是真正的随机数发生器。
从下面的链接: http://docs.oracle.com/javase/7/docs/api/java/util/Random.html ,它已被引述
这个类的一个实例用于生成伪随机数流。 类使用一个48位的种子,这是使用线性同余式修改。
我要实现真随机数发生器。 请提出任何编程语言或Java中的替代品
您正在尝试使用产生仅确定性alghorithm一个随机数,expresed在一些编程语言如Java。 这是不可能以一种确定的设备创建一个真正的随机数发生器。
截至确定性非常定义,我们知道,如果一个设备在相同状态下配置它总是会出现相同的行为。
在一个真正的随机数发生器的特定情况下,设备将与没有输入和一个输出(dessired随机数)的算法。 在这种条件下确定的算法只能产生总是相同的数。 因此,不是随机的。
伪随机生成器通过存储他们使用,以产生一个数字序列与随机性的外观的内部状态模仿随机性。 概念上的内部状态的算法只是一个输入和相同的内部状态的算法总是会产生相同的输出。 虽然这些算法提供不断变化的数字流,他们是不是在所有真正随机的,因为他们总是会产生相同的数字串。
您可以尝试每次初始化这样的伪随机算法的内部状态不同的值,从而获得随机数的不同的数据流,以提高多一点。 但是这会带来两个问题:
它实际上是可以创建使用的算法的随机数发生器。 你将不得不使用非确定性算法。 但是,这样的算法需要一个随机数生成自己为了不确定性。 如物理设备或竞态条件。
这是不可能生成代码真随机数发生器真。 它必须是随机性的物理源,即使这样也有对如何随机是随机足以被称为真正的随机的一些问题。
你可以购买各种USB随机数生成器,你可以插入并从应用程序中获取的值。
作为@depperm评论说,这几乎是不可能的当前计算机。 这也是一个有趣的理念问题,的“真正随机”的概念是否有意义,甚至...
但是如果你想比一个伪随机数生成器的东西“更随机”,你可以得到某种参与“真实世界”的事件。 不要问用户输入一个随机种子 - 人是不是在自觉地被“随机”非常好。 有些东西你可以尝试(任何这些可以被用来“种子”的伪随机数生成器):
-s
许多现代计算机有产生真正的随机数的硬件手段。 微处理器通常有一个使用反向偏置二极管或一些热噪声放大器产生的随机比特,美白它们,然后将它们传递到OS的指令。 也有加密狗,你可以购买插头插入USB端口,生成随机数为您服务。
即使系统没有特定的RNG硬件,操作系统可以从键盘和鼠标定时收集熵,并提供基于这些数字。 在Linux和OSX,你可以使用/ dev /随机访问此。 在Windows中,有CryptGenRandom()。 一个良好实现的Linux将会使用处理器的原生RNG为好,但有些人可能不。
除了操作系统,有喜欢random.org,从气象数据产生随机数的Web服务。