伪随机VS真随机(2012)

2020-07-15 10:52:35

曾几何时,我偶然发现了Random.org,这是一个非常棒的真正的随机数生成服务。真随机数生成器(TRNG)和伪随机数生成器(PRNG)之间的区别在于TRNG使用不可预测的物理手段生成数字(如大气噪声),而PRNG使用数学算法(完全由计算机生成)。你可以在Random.org和维基百科上阅读更多关于这方面的内容。

当我决定创建自己的伪随机生成的位图进行比较时,我正在摆弄位图生成器。难道你不知道吗,我尝试的第一件事就显示了一种模式!

没有多少PRNG会产生这样明显的视觉模式,它恰好是语言(PHP)、操作系统(Windows)和函数(rand())的糟糕组合。我在Linux环境中运行相同的代码,它没有明显的视觉模式。我也在Windows中再次运行了相同的代码,但使用的是PHP的mt_rand()函数,该函数利用Mersenne Twister生成更好的随机数,并且它没有明显的视觉模式。如果你想更多地了解为什么会发生这种情况,请阅读这篇文章。

<;?PHP//需要GD库头(";Content-type:image/png";);$im=imagecreatetruecolor(512,512)或DIE(";Cannot Initialize new GD image stream";);$White=imagecolorallocation($im,255,255,255);for($y=0;$y<;512;$y++){for($x=0;$y++){for($x=0;$。}}Imagepng($im);ImageDestroy($im);基本上,使用真正的随机数生成器你不需要担心这类事情,除非它的安全性被以某种方式破坏(实际上是一个完全不同的话题)。伪随机数生成器的质量差别很大。有些是可怕的,有些是非同寻常的,但都不是真的。