【发布时间】:2012-06-22 12:25:12
【问题描述】:
如何为每个用户制作绝对原创的盐?
在PHP中使用time()函数会更好吗?
【问题讨论】:
标签: php hash salt saltedhash
如何为每个用户制作绝对原创的盐?
在PHP中使用time()函数会更好吗?
【问题讨论】:
标签: php hash salt saltedhash
在许多情况下,一个简单的uniqid(mt_rand(), true) 就可以生成随机盐。结合 Blowfish 应该会给你一个很好的密码哈希。
替代项是伪随机源,例如 /dev/urandom 或 openssl_pseudo_random_bytes()。还有一些服务会为您生成随机数据(基于放射性退化)。
【讨论】:
使用这一行在php中生成强盐
$salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
【讨论】:
考虑使用 random salt 而不是 non-random。也许你会在这篇文章中找到有用的东西http://www.gregboggs.com/php-blowfish-random-salted-passwords/
也可以看看这篇文章http://codahale.com/how-to-safely-store-a-password/
一种方法是为每个用户生成一个唯一的盐并将该盐也存储在数据库中。
另一个好方法是算法,它生成密码哈希值必须超过秒计算盐分。您的哈希算法越复杂 - 想要破解您的数据库的人面临的问题就越多
【讨论】:
您可以在 PHP 中使用 microtime() 函数生成基于微秒而不是秒的数字,这使得用户几乎不可能与另一个用户拥有相同的盐分。您也可以将此数字与用户 ID 相乘。
也许md5(uniqid()) 足以为您的应用添加盐。
编辑:忘记在 uniqid() 函数中提及 more_entropy 参数。即使函数在同一微秒内运行两次,它也会减少相同字符串的机会,因此编辑后的函数应如下所示:
$salt = md5(uniqid($user_id, TRUE));
【讨论】: