先前输出来预测将从 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( 以查看它是否与输出匹配。如果是这样,您可能拥有正确的种子,并且可以生成未来的输出。否则继续循环。