更新时间:2023-09-29 16:02:10
伪随机数生成器 (PRNG)是非常复杂的野兽.
没有真正的完美"随机数生成器-实际上,可以用数学函数完成的***的事情是伪随机数-对于大多数意图和目的,它们看起来都是足够随机的.
实际上,从PRNG返回的数字中执行任何其他操作并不会真正增加其随机性,并且实际上,数字的随机性会降低.
所以,我***的建议是,不要弄乱从PRNG返回的值.使用足够适合预期用途的PRNG,如果不合适,则在必要时找到可以产生更好效果的PRNG.
坦率地说,看来 mt_rand
函数使用梅森捻线器,它实际上是一个非常好的PRNG,所以可能足以满足大多数休闲用途.
但是, Merenne Twister并非旨在用于任何安全上下文中.有关需要随机性以确保安全性的解决方案,请参见此答案.
修改
注释中有一个问题,为什么对随机数执行运算可以使其随机性降低.例如,某些PRNG可以在比特的不同部分返回更一致,更少的随机数-高端可能比低端更多.
因此,在丢弃高端并返回低端的操作中,该值的随机性可能小于从PRNG返回的原始值.