生成真随机数发生器在任何编程语言(Generate True Random Number Gener

2019-10-24 01:25发布

按照文件,java.util.Random的是不是真正的随机数发生器。

从下面的链接: http://docs.oracle.com/javase/7/docs/api/java/util/Random.html ,它已被引述


这个类的一个实例用于生成伪随机数流。 类使用一个48位的种子,这是使用线性同余式修改。


我要实现真随机数发生器。 请提出任何编程语言或Java中的替代品

Answer 1:

您正在尝试使用产生仅确定性alghorithm一个随机数,expresed在一些编程语言如Java。 这是不可能以一种确定的设备创建一个真正的随机数发生器。

截至确定性非常定义,我们知道,如果一个设备在相同状态下配置它总是会出现相同的行为。

在一个真正的随机数发生器的特定情况下,设备将与没有输入和一个输出(dessired随机数)的算法。 在这种条件下确定的算法只能产生总是相同的数。 因此,不是随机的。

伪随机生成器通过存储他们使用,以产生一个数字序列与随机性的外观的内部状态模仿随机性。 概念上的内部状态的算法只是一个输入和相同的内部状态的算法总是会产生相同的输出。 虽然这些算法提供不断变化的数字流,他们是不是在所有真正随机的,因为他们总是会产生相同的数字串。

您可以尝试每次初始化这样的伪随机算法的内部状态不同的值,从而获得随机数的不同的数据流,以提高多一点。 但是这会带来两个问题:

  • 你在哪里得到那个初始状态? 如果你总是使用相同的初始状态,你没有得到不同的数字流。 并试图算法(因而确定性)获得一个随机的状态又是一样的问题。
  • 即使你从一个物理源获得真正的随机初始状态的数字流仍然不会真正随机的。 每个数是通过从先前状态确定的算法来计算。 因此,通过检查数字的长流有可能最终会知道下一个号码是什么。

它实际上是可以创建使用的算法的随机数发生器。 你将不得不使用非确定性算法。 但是,这样的算法需要一个随机数生成自己为了不确定性。 如物理设备或竞态条件。



Answer 2:

这是不可能生成代码真随机数发生器真。 它必须是随机性的物理源,即使这样也有对如何随机是随机足以被称为真正的随机的一些问题。

你可以购买各种USB随机数生成器,你可以插入并从应用程序中获取的值。



Answer 3:

作为@depperm评论说,这几乎是不可能的当前计算机。 这也是一个有趣的理念问题,的“真正随机”的概念是否有意义,甚至...

但是如果你想比一个伪随机数生成器的东西“更随机”,你可以得到某种参与“真实世界”的事件。 不要问用户输入一个随机种子 - 人是不是在自觉地被“随机”非常好。 有些东西你可以尝试(任何这些可以被用来“种子”的伪随机数生成器):

  • 让用户随意左右移动鼠标,和哈希他们的动作;
  • 检查东西一样的当前时间的低几位(比如毫秒或微秒) - 尽管根据系统的不同,他们总是可以为0,或始终为16的倍数,或东西)。
  • 得到像某个地方的一些https://www.random.org (他们使用大气噪声)

-s



Answer 4:

许多现代计算机有产生真正的随机数的硬件手段。 微处理器通常有一个使用反向偏置二极管或一些热噪声放大器产生的随机比特,美白它们,然后将它们传递到OS的指令。 也有加密狗,你可以购买插头插入USB端口,生成随机数为您服务。

即使系统没有特定的RNG硬件,操作系统可以从键盘和鼠标定时收集熵,并提供基于这些数字。 在Linux和OSX,你可以使用/ dev /随机访问此。 在Windows中,有CryptGenRandom()。 一个良好实现的Linux将会使用处理器的原生RNG为好,但有些人可能不。

除了操作系统,有喜欢random.org,从气象数据产生随机数的Web服务。



文章来源: Generate True Random Number Generator in any of programming language
标签: java random