PHP的rand功能真的那么糟糕吗?

Nie*_*sol 11 php prng

我知道鼓励使用它mt_rand(),rand()因为它使用Mersenne Twister而不是任何PRNG rand()使用,但这里似乎从未考虑过用户活动.

事实上,用户的行为可以被认为是非常随机的.例如,在任何给定时刻,用户可能有4%的可能触发rand()一个功能的呼叫,用户触发三个rand()呼叫的概率为8%shuffle(),用户触发两个rand()呼叫的概率为20%,每个用户加载PRNG前进一页的时间.

毕竟,不是NPC运动是什么让神奇宝贝游戏中的RNG滥用如此令人沮丧?

因此,请记住,虽然rand()确实有其模式,但用户活动的随机性和用途的多样性rand()足以使rand()缺点无关紧要吗?从绝对意义上讲,mt_rand()"更随机".但这与人体元素的熵相比如何呢?

fsw*_*fsw 4

如果您假设对 rand() 的调用是由人类用户随机生成的,那么我猜您的逻辑是正确的。

然而,想象一个机器人每 X 秒发送相同的请求(在夜间不被人类呼叫中断)或一个运行给定时间并逐一运行 rand() 的简单脚本。那么你就不能完全依赖随机性。

来自 php.net 的评论:

请注意,自动播种似乎是在当前秒数内完成的,这意味着您可以在快速服务器上多次运行获得相同的结果。要么使用更频繁更改的种子自己调用 srand() ,要么使用似乎不会遇到该问题的 mt_rand() 。