我正在浏览这篇文章 https://www.ambionics.io/blog/php-mt-rand-prediction
它声称如果我们使用 mt_rand(),我们可以使用两个值而不是暴力破解来获取种子值。
文章中说
使用 mt_rand() 生成随机数的第一步是使用种子(无符号整数)生成 624 个值的状态数组。这是通过调用 mt_srand($seed) 或由 PHP 在请求第一个随机数时自动完成的。此后,每次调用 mt_rand() 都会获取下一个状态值,对其进行加扰,然后将其返回给用户。
我的问题:
mt_rand()
是否完全不安全或者它也依赖于平台?例如,当我执行 mt_rand()
时,将在我的计算机中创建 624 个值的种子状态数组是不同的。如果 B 使用相同的种子值执行 mt_rand()
,则输出状态将会不同。为什么我们都得到相同的随机数?
播种意味着提供初始状态。每次使用相同的数字作为种子时,无论您在什么机器上运行它,您都会获得相同的伪随机数集。您可以将其视为对给定输入数字执行一系列复杂的数学运算。
mt_rand()
是一个伪随机数生成器。这意味着它不会生成真正的随机数;它只生成看起来随机的那些。该过程是完全可逆且可重复的。因此,它在加密上并不安全。
random_bytes()
或 Random\Engine\Secure
类。