2

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

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

4

3 回答 3

2

今天一个合理的(强加密)安全级别是 128 位。这与使用 128 位密码(例如 AES-128)的对称加密获得的安全级别相同。假设冲突对您的应用程序来说是个问题,因为您希望值是唯一的,我们需要考虑生日悖论,因此您的 cookie 值中需要 256 位随机数据​​。那是 32 个字节length。以 256 位安装生日攻击大约需要 2 256/2 = 2 128次尝试找到冲突,这相当于 128 位安全级别。

于 2013-01-22T11:25:17.100 回答
0

我认为有一个更好的功能可以满足您的需求:uniqid(),它生成一个(尽可能)随机值,基于microtime(). 当然,这不是加密安全的,但您没有指定它必须是。

用法:uniqid()返回一个 13 个字符长的字符串,uniqid("", TRUE)23 个字符,uniqid($var)产生strlen($var)+13字符。

于 2013-01-19T19:55:25.973 回答
0

来自 uniqid 的 PHP 文档:

警告

此函数不会生成加密安全令牌,事实上,在没有传递任何其他参数的情况下,返回值与 microtime() 几乎没有什么不同。如果您需要生成加密安全令牌,请使用 openssl_random_pseudo_bytes()。

于 2015-09-30T13:24:29.927 回答