PHP中的密码安全和唯一字符串

时间:2016-08-13 08:48:23

标签: php security

我一直在使用

$string = bin2hex(openssl_random_pseudo_bytes(16)) . uniqid();

因为我需要一些既低温又安全又独特的字符串。问题是:这是一种天真的做法吗?通过使用uniqid()的结果添加到字符串的末尾,我是否会泄露任何可能危及字符串安全性的信息?我问这个是因为uniqid()是基于系统时间的,我担心的是这是否可以提供任何允许攻击者猜测未来输出的信息?

由于

2 个答案:

答案 0 :(得分:2)

您应该使用以下内容之一来生成crytopgrahically安全唯一字符串/数字,

  1. bin2hex(openssl_random_pseudo_bytes(16, TRUE)); // Refer manual - (PHP 5> = 5.3.0,PHP 7)
  2. bin2hex(random_bytes(16)); // Refer manual - (PHP 7)
  3. 如果您想生成随机数,可以使用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()