为什么我每次的加密后的密码都不同。就拿密码“b”来说,我每次存进mongodb的密码都是不同的hash,这次为什么啊?对吗?
Kvkens
2014-10-07
1 回答
这就是加盐的过程,同样的密码,最终生成的 hash 是不同的,具体比对则是通过 bcr
看源码, save 的时候:
bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt) { if (err) return next(err) bcrypt.hash(user.password, salt, function(err, hash) { if (err) return next(err) user.password = hash next() }) })
首先造盐,拿到一个 salt ,然后混合到 password ,生成最终的 hash,拿 aaabbb 这个原始密码为例,第一次 save 的时候,生成的 salt 和 hash 分别是
$2a$10$qblANrkDqjdO87voGXP66O
$2a$10$qblANrkDqjdO87voGXP66OU9R.vUq8c08ZwPhgEycLpQ1wJ7V7Anm
第二次则是
$2a$10$5Co.ZwYWLrXofKa4PbnRde
$2a$10$5Co.ZwYWLrXofKa4PbnRdegAd7NpHKAYsvEfJ0bxQjqMGoJEvaBKq
hash 之所以不同就是 由于 盐的不同,这样极大的增强了密码的强度,使得反向破解变得极为困难,但同时注意比对 salt 可以发现,生成的 hash 中就包含了掺进去的 盐,以第二次为例,名词我也不知道如何翻译最佳,把 hash 拆解后:
Format (identifier): 2a
Cost parameter: 10
Salt: 5Co.ZwYWLrXofKa4PbnRde
Hash digest: gAd7NpHKAYsvEfJ0bxQjqMGoJEvaBKq
至于如何 compare 就交给 bcrypt 去做了,更多了解可以看这个:https://github.com/ademarre/binary-mcf
举报
0/150
提交
取消