在PHP.net中mt_rand()
和uniqid()
被解释为"不会生成加密安全值"鼓励使用random_int()
,random_bytes()
或openssl_random_pseudo_bytes()
代替。
"加密安全"是什么意思?
答案 0 :(得分:2)
意味着可以猜测和预测这些值,因为已知算法所产生。
因此,如果您需要用户无法猜测接下来会发生什么的价值,那么您就不应该继续使用它们。
考虑一个扑克游戏,如果用户可以猜出下一张牌是什么会怎么样?
您可以查看此SO answer
中的详细信息答案 1 :(得分:1)
计算机在计算真正的随机数时通常不会做得很好。这意味着计算机计算的伪随机数可能是可预测的。
如果此随机数随后被用作加密密钥的基础,则密钥以及安全消息可能会受到损害。
加密安全伪随机数生成器(CSPRNG),其中生成的数字对于任何第三方来说都非常难以预测它可能是什么。这意味着从这些随机数派生的加密密钥非常难以确定使用这些密钥保护的消息是安全的。
这
https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator
理想情况下,CSPRNG中随机数的生成使用从高质量源(通常是操作系统的随机性API)获得的熵。然而,在几个这样表面上独立的过程中发现了意想不到的相关性。从信息论的角度来看,随机性的量,即可以生成的熵等于系统提供的熵。但有时,在实际情况下,需要比可用熵更多的随机数。在实际操作中,从正在运行的系统中提取随机性的过程也很慢。在这种情况下,有时可以使用CSPRNG。 CSPRNG可以"伸展"更多位的可用熵。