如何为每个用户制作绝对原创的盐?
在PHP中使用time()
函数更好吗?
答案 0 :(得分:4)
在许多情况下,简单的uniqid(mt_rand(), true)
会生成随机盐。结合Blowfish应该给你一个非常好的密码哈希。
替代品是伪随机来源,例如/dev/urandom
或openssl_pseudo_random_bytes()
。还有一些服务可以为您生成随机数据(基于无线电活动降级)。
答案 1 :(得分:3)
使用此行在php中生成强盐
$salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
答案 2 :(得分:2)
考虑使用随机盐而非非随机..也许您会在本文中找到有用的内容http://www.gregboggs.com/php-blowfish-random-salted-passwords/
另请参阅本文http://codahale.com/how-to-safely-store-a-password/
一种方法是为每个用户生成一个唯一的盐,并将该盐存储在DB中。
另一个好方法是算法,它生成密码的哈希值必须计算盐超过秒。您的哈希算法越复杂 - 想要破解数据库的人面临的问题就越多
答案 3 :(得分:1)
您可以在PHP中使用microtime()
函数来生成基于微秒的数字,而不是秒,这使得用户几乎不可能与其他用户具有相同的盐。您也可以将此数字乘以用户ID。
对于您的应用程序,可能md5(uniqid())
对于盐来说已经足够了。
编辑:忘了用uniqid()
函数提及more_entropy参数。即使函数在相同的微秒下运行两次,它也会减少相同字符串的几率,因此编辑的函数应如下所示:
$salt = md5(uniqid($user_id, TRUE));