我一直在使用
$string = bin2hex(openssl_random_pseudo_bytes(16)) . uniqid();
因为我需要一些既低温又安全又独特的字符串。问题是:这是一种天真的做法吗?通过使用uniqid()的结果添加到字符串的末尾,我是否会泄露任何可能危及字符串安全性的信息?我问这个是因为uniqid()是基于系统时间的,我担心的是这是否可以提供任何允许攻击者猜测未来输出的信息?
由于
答案 0 :(得分:2)
您应该使用以下内容之一来生成crytopgrahically安全唯一字符串/数字,
bin2hex(openssl_random_pseudo_bytes(16, TRUE));
// Refer manual - (PHP 5> = 5.3.0,PHP 7)bin2hex(random_bytes(16));
// Refer manual - (PHP 7)random_int(100, 999)
// Refer manual - (PHP 7)答案 1 :(得分:1)
你为什么要强调它?为什么不只是使用第一个功能?
有16个字节,大概有34个,后面跟着38个零可能性。对于几乎任何应用,碰撞风险可以忽略不计。我会坚持只是
bin2hex(openssl_random_pseudo_bytes(16))
来自the manual:
如果您需要加密安全值,请考虑使用 random_int(),random_bytes()或openssl_random_pseudo_bytes()