2013-03-25 69 views
0

我想问一下,是否有可能为每个用户生成一个独特的盐,然后散列它,就像 sha1(sha1($password . $salt)) 那么$ salt是一个随机生成的字符串?为每个用户生成独特的SALT?

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

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

非常感谢。

+0

http://stackoverflow.com/a/2235548/251311 – zerkms 2013-03-25 00:36:41

回答

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); 
相关问题