为每个用户生成唯一的SALT?

时间:2013-03-25 00:31:58

标签: php hash sha1 salt

我想问一下,是否可以为每个用户生成一个唯一的salt,然后将其哈希 sha1(sha1($password . $salt)) 所以$ salt是一个随机生成的字符串?。

如果是,我将如何在登录时加密密码?

Xenforo使用它,我想知道如果他们为每个用户使用独特的盐,他们如何加密密码?

非常感谢。

1 个答案:

答案 0 :(得分:5)

Don't make your own password hashing algorithm。这很容易破解,当您的数据库遭到入侵时,您的用户不会欣赏他们的密码被盗。

Bcrypt和其他久经考验的哈希已经做到了这一点:

>>> bcrypt.generate_password_hash('password', 15)
    '$2a$15$bzaLXuer1C8dtSckDp3AI.eOoL/nOTsSdpjEMyDMcJ3ZQELdRcLzq'
>>> bcrypt.generate_password_hash('password', 15)
    '$2a$15$Ye.cFInKhzo1KvAJGSi6yORV5uEqeW.Z1oAhdfi.163Psz4YPA3CO'

随机盐和轮数存储在散列本身中,由分隔符分隔,这使得常量密码检查功能可以从生成的散列字符串中选择盐。

如果出于某些其他原因需要创建安全的随机字符串,请使用openssl_random_pseudo_bytes()

$bytes = openssl_random_pseudo_bytes(64, true);
$hex = bin2hex($bytes);