為什么我每次的加密后的密碼都不同。就拿密碼“b”來說,我每次存進(jìn)mongodb的密碼都是不同的hash,這次為什么???對嗎?

Kvkens
2014-10-07
1 回答
舉報(bào)
0/150
提交
取消
2014-10-08
這就是加鹽的過程,同樣的密碼,最終生成的 hash 是不同的,具體比對則是通過 bcr
看源碼, save 的時(shí)候:
首先造鹽,拿到一個(gè) salt ,然后混合到 password ,生成最終的 hash,拿 aaabbb 這個(gè)原始密碼為例,第一次 save 的時(shí)候,生成的 salt 和 hash 分別是
$2a$10$qblANrkDqjdO87voGXP66O
$2a$10$qblANrkDqjdO87voGXP66OU9R.vUq8c08ZwPhgEycLpQ1wJ7V7Anm
第二次則是?
$2a$10$5Co.ZwYWLrXofKa4PbnRde
$2a$10$5Co.ZwYWLrXofKa4PbnRdegAd7NpHKAYsvEfJ0bxQjqMGoJEvaBKq
hash 之所以不同就是 由于 鹽的不同,這樣極大的增強(qiáng)了密碼的強(qiáng)度,使得反向破解變得極為困難,但同時(shí)注意比對 salt 可以發(fā)現(xiàn),生成的 hash 中就包含了摻進(jìn)去的 鹽,以第二次為例,名詞我也不知道如何翻譯最佳,把 hash 拆解后:
Format (identifier): 2a
Cost parameter: 10
Salt: ?5Co.ZwYWLrXofKa4PbnRde
Hash digest: ?gAd7NpHKAYsvEfJ0bxQjqMGoJEvaBKq
至于如何 ?compare 就交給?bcrypt 去做了,更多了解可以看這個(gè):https://github.com/ademarre/binary-mcf