Node bcrypt是如何散列/比较工作的,因为salt是未知的

时间:2017-09-27 10:30:04

标签: node.js bcrypt

我正在查看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已包含盐和成本。但如果是这样的话,一旦黑客得到这个哈希,他就已经可以使用彩虹表或其他东西强制密码?

分别存储哈希和盐是一种更好的做法吗?

这是一种处理密码的安全方法吗?

1 个答案:

答案 0 :(得分:3)

你误解了盐提供的安全性。没有期望或意图盐将被攻击者保密 - 如果攻击者获得了哈希密码,他们也将获得盐。但它仍然阻止他们使用彩虹表或其他预先计算的攻击,因为他们没有使用特定盐生成的彩虹表。当然,他们可以进行蛮力攻击,但是bcrypt还有其他功能可以解决这个问题。