来自http://php.net/manual/en/function.mt-rand.php:
警告此功能不会生成加密安全值,也不应用于加密目的。
有人可以解释一下这在网站上的含义吗?这是否意味着它不应该用于生成安全令牌?
在32位系统上PHP_INT_SIZE
刚刚超过20亿。如果我生成一个数字mt_rand(0, PHP_INT_SIZE)
并添加一个长100个字符的随机字符串并将其用作安全令牌,它是否说它不安全?
答案 0 :(得分:2)
如果通过“安全令牌”表示nonce,即一个一次性使用的令牌,它几乎是确定的,那么mt_rand
就可以了。
“不生成加密安全值”在此上下文中意味着给出了有关生成器someone can predict what its output will be in the future状态的足够信息。如果您打算使用所述输出来加密敏感信息,显然这是一个交易破坏者。
答案 1 :(得分:1)
这是因为它不是随机的。 Mersenne Twister基于线性递归,因此线性递归生成的任何伪随机数序列都是不安全的,因为从输出的足够长的子序列,可以预测进一步的结果。