我正在查看bcrypt docs中的代码示例:
bcrypt.hash(myPlaintextPassword, saltRounds, function(err, hash) {
// Store hash in your password DB.
});
我不明白的是,如果我不知道盐,我如何比较密码?
bcrypt.compare(myPlaintextPassword, hash, function(err, res) {
// res == true
});
经过一些阅读,我了解到hash
已包含盐和成本。但如果是这样的话,一旦黑客得到这个哈希,他就已经可以使用彩虹表或其他东西强制密码?
分别存储哈希和盐是一种更好的做法吗?
这是一种处理密码的安全方法吗?
答案 0 :(得分:3)
你误解了盐提供的安全性。没有期望或意图盐将被攻击者保密 - 如果攻击者获得了哈希密码,他们也将获得盐。但它仍然阻止他们使用彩虹表或其他预先计算的攻击,因为他们没有使用特定盐生成的彩虹表。当然,他们可以进行蛮力攻击,但是bcrypt还有其他功能可以解决这个问题。