且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

在php中生成加密安全的随机数

更新时间:2023-09-29 16:02:10

伪随机数生成器 (PRNG)是非常复杂的野兽.

没有真正的完美"随机数生成器-实际上,可以用数学函数完成的***的事情是伪随机数-对于大多数意图和目的,它们看起来都是足够随机的.

实际上,从PRNG返回的数字中执行任何其他操作并不会真正增加其随机性,并且实际上,数字的随机性会降低.

所以,我***的建议是,不要弄乱从PRNG返回的值.使用足够适合预期用途的PRNG,如果不合适,则在必要时找到可以产生更好效果的PRNG.

坦率地说,看来 mt_rand 函数使用梅森捻线器,它实际上是一个非常好的PRNG,所以可能足以满足大多数休闲用途.

但是, Merenne Twister并非旨在用于任何安全上下文中.有关需要随机性以确保安全性的解决方案,请参见此答案.

修改

注释中有一个问题,为什么对随机数执行运算可以使其随机性降低.例如,某些PRNG可以在比特的不同部分返回更一致,更少的随机数-高端可能比低端更多.

因此,在丢弃高端并返回低端的操作中,该值的随机性可能小于从PRNG返回的原始值.