PHP在我们这个时代加密密码的最好方法

时间:2012-06-22 12:25:12

标签: php hash salt saltedhash

如何为每个用户制作绝对原创的盐? 在PHP中使用time()函数更好吗?

4 个答案:

答案 0 :(得分:4)

在许多情况下,简单的uniqid(mt_rand(), true)会生成随机盐。结合Blowfish应该给你一个非常好的密码哈希。

替代品是伪随机来源,例如/dev/urandomopenssl_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));