PHP 的 mt_rand 是如何播种的?

问题描述 投票:0回答:1

我知道 PHP 的

mt_rand()
不应该用于安全目的,因为它的结果在加密方面不强。然而,许多 PHP 代码就是这样做的,或者在没有更好的随机性来源时将其用作后备。

那么情况有多糟糕呢?

mt_rand
使用什么随机源进行播种?对于加密应用程序来说,
mt_rand
还有其他安全问题吗?

php security random mersenne-twister
1个回答
19
投票

在 PHP 5.4 中,如果

mt_rand
在第一次使用时自动播种(PHP 源)。 种子值是当前时间戳、PHP 进程 PID 和 PHP 内部 LCG 生成的值的函数。我没有检查 PHP 早期版本的源代码,但文档暗示该播种算法从 PHP 5.2.1 开始使用。

mt_rand
背后的RNG算法是Mersenne Twister。谈论它“有多糟糕”并没有什么意义,因为它有明确的记录(不幸的是,不在 PHP 文档页面上)它“完全不适合加密应用程序”。如果您想要加密强度随机性,请使用记录的加密强度生成器。

更新:

您可能还想查看来自 crypto.SE 的这个问题

© www.soinside.com 2019 - 2024. All rights reserved.