我需要生成一个将放在cookie中的值,以便我能够唯一地识别用户,并且经过大量阅读后,似乎openssl_random_pseudo_bytes()
可能符合要求。
但是,我不确定我应该为函数使用什么length
参数,以使值唯一。即:我应该使用10,25,50,100等的长度吗?
答案 0 :(得分:2)
今天合理的(强加密)security level是128位。这与使用128位密码(例如AES-128)的对称加密所获得的安全级别相同。假设碰撞对您的应用程序来说是个问题,因为您希望值是唯一的,我们需要考虑birthday paradox,因此您需要在cookie值中使用256位随机数据。这是length
的32个字节。以256位挂载birthday attack需要大约2 256/2 = 2 128 尝试查找冲突,这相当于128位安全级别。 / p>
答案 1 :(得分:0)
我认为有一个更好的功能可以满足您的需求:uniqid()
,它会生成一个(尽可能的)随机值,基于microtime()
。当然,这不是加密安全的,但你没有指定它必须是。
用法:uniqid()
返回一个长度为13个字符的字符串,uniqid("", TRUE)
个23个字符,uniqid($var)
会产生strlen($var)+13
个字符。
答案 2 :(得分:0)
来自uniqid的PHP文档:
此函数不会生成加密安全令牌,事实上,如果没有传递任何其他参数,则返回值与microtime()略有不同。如果需要生成加密安全令牌,请使用openssl_random_pseudo_bytes()。