通过具有许多输出来预测 PHP rand()


我想知道是否可以通过使用 PHP rand(( 函数的

先前输出来预测将从 PHP rand(( 函数生成的下一个伪随机数。

一个例子是我有 n 个 rand(1,10( 的输出,如 8、5、10、3、3、2 ...9, 8 ...等等。

所以问题是,有什么方法可以使用这些已经生成的数字来预测下一个数字?

编辑

由于这个问题被标记为过于宽泛,我将尽量更具体。在使用 rand(( 函数时,我是否可以预测下一个 RGN 或在运行在 Linux 上的 PHP 上恢复种子,只需观察它给出的一些输出。

一个具体的例子是以下输出:

21962

10038

10425

17032

由以下代码生成:

<?php
echo rand(1, 68703);

不确定引擎盖下是什么,但可能被以下链接之一所涵盖:

  • 破解PHP的php_mt_rand:https://github.com/bishopfox/untwister
  • 破解PHP的lcg_value:http://www.crypto-world.com/lcg_value.html

如果没有涵盖,请向我提供源代码,我将破坏它。

编辑:按照下面评论中的要求,我更新了我的答案。

打破它的一种微不足道的方法是蛮力搜索srand种子。通常这是一个 32 位 int(暴力破解需要几分钟(,但在某些平台上,它可能是 64 位的(通过蛮力破解需要太长时间(。因此,您只需遍历每个候选种子,执行 srand( 候选种子(,然后生成您的 rand(1, 68703( 以查看它是否与输出匹配。如果是这样,您可能拥有正确的种子,并且可以生成未来的输出。否则继续循环。

最新更新