我正在查看 bcrypt 文档中的代码示例:
bcrypt.hash(myPlaintextPassword, saltRounds, function(err, hash) {
// Store hash in your password DB.
});
我不明白的是,如果我不知道盐,如何比较密码?
bcrypt.compare(myPlaintextPassword, hash, function(err, res) {
// res == true
});
经过一番阅读,我了解到哈希
已经包含盐和成本。但如果是这样的话,一旦黑客获得这个哈希值,他就可以使用彩虹表或其他东西来暴力破解密码?
将哈希值和盐分开存储是更好的做法吗?
这是处理密码的安全方法吗?
最佳答案
您误解了盐提供的安全性。没有期望或意图对攻击者保密盐——如果攻击者获得散列密码,他们也将获得盐。但它仍然阻止他们使用彩虹表或其他预先计算的攻击,因为他们不会拥有使用特定盐生成的彩虹表。当然,他们可以进行暴力攻击,但 bcrypt 还有其他功能可以让这变得困难。
关于node.js - 由于盐未知,Node bcrypt 哈希/比较如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46445583/