我知道 PHP 的
mt_rand()
不应该用于安全目的,因为它的结果在加密方面不强。然而,许多 PHP 代码就是这样做的,或者在没有更好的随机性来源时将其用作后备。
那么情况有多糟糕呢?
mt_rand
使用什么随机源进行播种?对于加密应用程序来说,mt_rand
还有其他安全问题吗?
在 PHP 5.4 中,如果
mt_rand
在第一次使用时自动播种(PHP 源)。 种子值是当前时间戳、PHP 进程 PID 和 PHP 内部 LCG 生成的值的函数。我没有检查 PHP 早期版本的源代码,但文档暗示该播种算法从 PHP 5.2.1 开始使用。
mt_rand
背后的RNG算法是Mersenne Twister。谈论它“有多糟糕”并没有什么意义,因为它有明确的记录(不幸的是,不在 PHP 文档页面上)它“完全不适合加密应用程序”。如果您想要加密强度随机性,请使用记录的加密强度生成器。
更新: