我知道PHP的mt_rand()
不应该用于安全目的,因为它的结果不是加密强大的。然而,许多PHP代码就是这样做的,或者如果没有更好的随机源,则将其用作后备。
那有多糟糕? mt_rand
用于播种的随机性来源是什么? mt_rand
加密应用程序是否存在其他安全问题?
答案 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。