Php openssl_random_pseudo_bytes()应该使用什么长度?

Php openssl_random_pseudo_bytes()应该使用什么长度?,php,cookies,openssl,Php,Cookies,Openssl,我需要在cookie中生成一个值,这样我就可以唯一地识别用户,在大量阅读之后,openssl\u random\u pseudo\u bytes()可能符合要求 但是,我不确定函数应该使用什么length参数才能使值唯一。例如:我应该使用10、25、50、100等长度吗?我认为有一个更好的函数满足您的需要:uniqid(),它根据microtime()生成一个(可能的)随机值。当然,这不是加密安全的,但您没有指定它必须是安全的 用法:uniqid()。这与使用128位密码(例如AES-128)进

我需要在cookie中生成一个值,这样我就可以唯一地识别用户,在大量阅读之后,
openssl\u random\u pseudo\u bytes()
可能符合要求


但是,我不确定函数应该使用什么
length
参数才能使值唯一。例如:我应该使用10、25、50、100等长度吗?

我认为有一个更好的函数满足您的需要:
uniqid()
,它根据
microtime()
生成一个(可能的)随机值。当然,这不是加密安全的,但您没有指定它必须是安全的


用法:
uniqid()。这与使用128位密码(例如AES-128)进行对称加密所获得的安全级别相同。假设碰撞对于应用程序来说是一个问题,因为您希望值是唯一的,我们需要考虑它,因此您希望cookie值中有256位随机数据。长度为32字节。在256位上装载一个文件大约需要2256/2=2128次尝试才能找到冲突,这相当于128位的安全级别。

来自uniqid的PHP文档:

小心
此函数不生成加密安全令牌,事实上,在未传递任何附加参数的情况下,返回值与microtime()几乎没有区别。如果需要生成加密安全令牌,请使用openssl_random_pseudo_bytes()

为什么不尽可能高?理论上,它的碰撞几率最低(即两个随机值相同)。也就是说,openssl_random_pseudo_bytes(PHP_INT_MAX)似乎是最好的。@giuliomusarello-这不会导致难以置信的大cookie大小吗?嗯。。。在我的系统上,PHP_INT_MAX给出2147483647,乘以1字节,大约是2147GB。差点从椅子上掉下来。这是对我的评论吗?