openssl_random_pseudo_bytes()应该使用多长?

时间:2013-01-19 16:16:53

标签: php cookies openssl

我需要生成一个将放在cookie中的值,以便我能够唯一地识别用户,并且经过大量阅读后,似乎openssl_random_pseudo_bytes()可能符合要求。

但是,我不确定我应该为函数使用什么length参数,以使值唯一。即:我应该使用10,25,50,100等的长度吗?

3 个答案:

答案 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()。