一尘不染

mt_rand的缺点是什么?

php

偏见的定义是什么:

当max超过2 ^ 32时,mt_rand()返回值的分布在PHP的64位版本上偏向偶数。

如果这是替代四舍五入规则中的那种偏见,我认为这并不重要(因为这种偏见并不明显)。

除了mt_rand()宣称是比快四倍rand(),只是在前面增加3个字符!

假设mt_rand可用,那么使用它的缺点是什么?


阅读 274

收藏
2020-05-29

共1个答案

一尘不染

mt_rand使用梅森倍捻机算法,这远远优于LCG通常使用的rand。例如,LCG
的周期仅为 2 32,而mt_rand的周期为2
19937-1。此外,当绘制到多维空间中时,LCG生成的所有值都将位于线或平面上。而且,不仅在实践上可行,而且相对容易地确定LCG的参数。LCG的唯一优势是可能稍快一些,但是在使用php进行编码时,规模是完全不相关的。

但是,mt_rand也不适合用于加密目的 (生成令牌,密码或加密密钥)。

如果需要加密随机性,请random_int在php7中使用。在较早的php版本上,请从符合POSIX的操作系统上阅读/dev/urandom/dev/random在其上阅读。

2020-05-29