繁体   English   中英

PHP的mt_rand如何播种?

[英]How is PHP's mt_rand seeded?

我知道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文档页面上),它完全不适合加密应用程序 如果您想要加密随机性,请使用文档化的加密强度生成器。

更新:您可能还想从crypto.SE查看此问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM