是否有可能在PHP中预测rand(0,10)?

S.V*_*ser 16 php math

我有一个脚本,我在PHP中使用rand函数.现在我读了一些鬼故事,它真的很容易预测那些结果.这可能来自客户端吗?

例如,假设我们有一个rand(0,10).是否有可能预测下一个数字?

Luc*_*one 35

rand()函数返回伪随机数.这并不意味着next可以预测数量.然而,这个图像可以解释单词的概念pseudorandom

兰特

你可以阅读这篇文章

图像是从一个带有randWindows系统功能的简单循环生成的.

header("Content-type: image/png");
$im = imagecreatetruecolor(512, 512) or die("Cannot Initialize new GD image stream");
$white = imagecolorallocate($im, 255, 255, 255);
for ($y = 0; $y < 512; $y++) {
    for ($x = 0; $x < 512; $x++) {
        if (rand(0, 1)) {
            imagesetpixel($im, $x, $y, $white); 
        } 
    } 
} 
imagepng($im); imagedestroy($im);
Run Code Online (Sandbox Code Playgroud)

它不是那么随意,真的吗?但既然你已经知道了......你可以预测下一个号码吗?

真随机数发生器(TRNG)和伪随机数发生器(PRNG)之间的区别在于TRNG使用不可预测的物理手段来生成数字(如大气噪声),PRNG使用数学算法(完全由计算机生成)

[...]

没有多少PRNG会像这样产生明显的视觉模式,它恰好是语言(PHP),操作系统(Windows)和功能(rand())的非常糟糕的组合.

  • 我在PHP5.5.4 Ubuntu 32位上执行了该代码.[这是结果](http://i.stack.imgur.com/N7J81.png). (4认同)
  • 我在Linux上用PHP5.4执行了PHP代码.[这是结果](http://imageshack.us/a/img254/8725/randomh.png). (3认同)
  • 这张照片说明它非常好.正如您所看到的那样,它构建了一个模式,您可以随时根据模式进行良好的预测. (2认同)

Lou*_*cci 7

你必须暴力破坏PRNG的状态.http://crypto.di.uoa.gr/CRYPTO.SEC/Randomness_Attacks_files/paper.pdf

PHP的rand()使用底层的标准库实现,这是基于操作系统的不同.

首先,定义操作系统.

下一步,获取Rand()函数的源代码和播种它的代码.

为简单起见,我们假设PRNG的种子就像服务器的毫秒时间.因此,HTTP请求进来,PHP播种PRNG并执行rand(0,10).如果你想预测你会......

  • 将客户端的时钟同步到服务器,从统计上获取从发送HTTP请求到服务器的准确时间,并使用时间戳读取响应HTTP标头.

  • 种子客户端PRNG(与服务器的实现方式相同)预测的未来时间,您将从服务器请求rand(0,10).在客户端上运行rand(0,10),将请求在确切的将来时间发送到服务器,结果将是相同的.

  • Ping时间,处理时间等使这成为一种相当强力的方法.

真的,通过互联网(没有直接访问服务器),你不会有太多的运气预测PHP的rand()函数的结果.