PHP的mt_rand如何播种?

时间:2012-07-06 08:35:46

标签: php security random mersenne-twister

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

那有多糟糕? mt_rand用于播种的随机性来源是什么? mt_rand加密应用程序是否存在其他安全问题?

1 个答案:

答案 0 :(得分:16)

在PHP 5.4中,如果mt_rand在第一次使用时自动播种(PHP source)。 seed value是当前时间戳,PHP进程PID和PHP内部LCG生成的值的函数。我没有检查以前版本的PHP的源代码,但documentation表示此种子算法已从PHP 5.2.1开始使用。

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

更新:您可能还想从crypto.SE查看this question