Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何得到真正的随机数?_Algorithm_Random - Fatal编程技术网

Algorithm 如何得到真正的随机数?

Algorithm 如何得到真正的随机数?,algorithm,random,Algorithm,Random,可能的重复项: 你好。 功能: Random rand = new Random(); rand.Next() 它以秒为单位给出基于时间的伪随机数。 如何得到真正的随机数? 我的意思是完全随机的,不是基于系统时间和一些算法。 比如,当你扔掉一个立方体,你得到的是真正的随机数,而不是基于时间和任何算法 使用麦克风的短样本或鼠标位置更改之间的时间,您认为如何?请用户点击空格键几次。使用按键之间的时间(以微秒为单位)为随机数生成器设定种子 (或者更好,使用剩余的时间(以微秒为单位mod 256微

可能的重复项:

你好。 功能:

Random rand = new Random();
rand.Next()
它以秒为单位给出基于时间的伪随机数。 如何得到真正的随机数? 我的意思是完全随机的,不是基于系统时间和一些算法。 比如,当你扔掉一个立方体,你得到的是真正的随机数,而不是基于时间和任何算法


使用麦克风的短样本或鼠标位置更改之间的时间,您认为如何?请用户点击空格键几次。使用按键之间的时间(以微秒为单位)为随机数生成器设定种子


(或者更好,使用剩余的时间(以微秒为单位mod 256微秒)来消除任何人类周期性。因此,每个按键都会给您一个随机字节,使用适当的笔划数为生成器设定种子)

您可以使用。

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

你可以使用一种服务,比如把一只猫放在装有毒药的盒子里,毒药会在放射性物质的单个原子衰变时释放出来。一小时后回来,打开盒子。如果猫死了,在程序中使用
0
作为随机位。如果它处于活动状态,请使用
1


根据需要,用尽可能多的猫和盒子重复上述操作。

为此,您需要一个

在大多数情况下,一个很好的替代方法是测量“硬件事件”的时间,如用户输入或网络活动

在Linux上,设备基于此方法生成字节。

我建议您:

真随机数生成器(TRNG)


这将为你指明正确的方向

很难得到真正的随机数。毕竟,PRNG在某种意义上是可预测的。但是基于物理源正确构建随机数生成器要困难得多;大多数随机源都不会那么快产生真正的随机比特,很难判断你是否犯了严重的错误。一个好的PRNG对于几乎所有的意图和目的都是更好的


(如果需要,请仅使用高质量的PRNG,因为它们的速度要慢得多,如果需要,请确保使用正确的PRNG:为加密设计的PRNG与为蒙特卡罗模拟设计的PRNG不同–加密PRNG确保每一位都很难猜到,而MCSim PRNG确保光谱特性良好–大多数其他用途是f或者PRNG只是希望它们不粗糙,速度快;标准的库通常足够好。)

昨天刚刚讨论过:谷歌搜索宇宙背景辐射,然后抓取一个样本。这是什么语言?(为无知道歉,假设C#?)你必须观察一个物理过程才能得到一个真正的随机数。将掷骰子设备和相机与你的机器连接起来。每次掷骰子时,使用图像识别来读取数值。这足够随机吗?@Anders:请不要在SO中使用tinyurl。@MAK,好的,不要让用户参与这个过程,这是一个糟糕的做法。我知道用鼠标生成一个RSA密钥,这并不困扰我。我想这取决于数字的数量和频率。人类实际上非常擅长生成随机性,因为我们不能精确地重复任何事情。这就是为什么人们仍然用手抛光望远镜的镜子。无论如何,鉴于OP没有提供关于他的系统的信息,我很抱歉一般来说,我不确定你从哪里得到随机性。为了解决你的书摘中的特定点,显然你不应该要求用户输入随机种子,这不是我在这里建议的。但是如果这让你感到高兴,除非你正在编写的应用程序根本不接受任何用户输入,否则就使用击键之间的时间,mo在UI的其他部分使用wiggles等来初始化RNG,而不是专门要求按多个键。这样不应该提供软件解决方案吗?(认识到这里没有一个好的纯软件解决方案)对不起,我被这个狗迷住了,我不得不分享…+1,因为它残忍地对待虚拟猫!哈哈哈…你让我笑了很多,伙计!竖起大拇指!