如何获得真正的随机数?

时间:2010-10-19 12:40:08

标签: algorithm random

  

可能重复:
  Understanding “randomness”
  Fastest implementation of a true random number generator in C#

您好。 功能:

Random rand = new Random();
rand.Next()

它以秒为单位给出基于时间的伪随机数。 如何获得真正随机的数字? 我的意思是完全随机,不是基于系统时间和一些算法。 就像,当你丢弃一个立方体时,你得到了真正的随机数,而不是基于时间和任何算法。

您如何看待使用麦克风短片或鼠标位置变化之间的时间?

9 个答案:

答案 0 :(得分:25)

将一只猫放入装有一瓶毒药的盒子里,当放射性物质的单个原子衰变时,它会释放出来。一小时后回来打开包装盒。如果猫死了,请在程序中使用0作为随机位。如果它还活着,请使用1

根据需要重复使用尽可能多的猫和盒子。

答案 1 :(得分:7)

您可以使用random.org

等服务

答案 2 :(得分:5)

要求用户按空格键几次。使用击键之间的微秒时间为随机数生成器播种。

(或者更好的是,使用剩余的时间,以微秒为单位,模拟256微秒,以消除任何人的周期性。因此,每个按键为您提供1个随机字节,使用适当数量的笔划为您的生成器播种)

答案 3 :(得分:5)

大多数编程随机函数都基于数学算法。有随机数发生器,在空气中使用波浪噪声(来自太空辐射),但它们是基于硬件的。

答案 4 :(得分:5)

为此,您需要hardware random number generater

对于大多数案例来说,替代这种情况的好处是测量“硬件事件”的时间,例如用户输入或网络活动。

在Linux上,/dev/random设备根据此方法生成字节。

答案 5 :(得分:4)

我会建议你:

真随机数发生器(TRNG)

http://www.random.org/randomness/

这将指向正确的方向!

答案 6 :(得分:4)

获取真正的随机数非常困难。毕竟,PRNG在某种意义上是可预测的。但是基于物理源正确构建随机数生成器要困难得多;大多数随机来源都不能快速产生真正的随机位,并且很难判断你是否犯了一个错误的错误。几乎所有意图和目的都是一个好的PRNG。

(如果你需要的话,只使用高质量的PRNG,因为它们要慢很多,如果你这样做,请确保使用正确的PRNG:专为加密设计的PRNG与为蒙特卡罗设计的PRNG不同模拟 - 加密PRNG确保每一点都难以猜测,而MCSim PRNG确保光谱特性良好 - 而PRNG的大多数其他用途只是希望它们不邋and而且速度快;标准库通常足够好那里。)

答案 7 :(得分:3)

答案 8 :(得分:2)