为什么在bcrypt中比较密码是否正确需要盐?

时间:2017-01-10 08:22:31

标签: node.js encryption bcrypt password-encryption

我想使用node.js bcrypt在将密码存储到数据库之前对其进行哈希处理。

此链接提供文档。 https://github.com/kelektiv/node.bcrypt.js

以下是散列密码的示例。

var bcrypt = require('bcrypt');
const saltRounds = 10;
const myPlaintextPassword = 's0/\/\P4$$w0rD';

var salt = bcrypt.genSaltSync(saltRounds);
var hash = bcrypt.hashSync(myPlaintextPassword, salt);
// Store hash in your password DB.

以下是检查密码的代码。

// Load hash from your password DB.
bcrypt.compareSync(myPlaintextPassword, hash); // true

这是我不明白的。在bcrypt.compareSync中,为什么没有参数salt?由于散列是从salt生成的,为什么比较明文密码不涉及哈希中使用的原始盐?

1 个答案:

答案 0 :(得分:7)

salt是数据库中字符串bcrypt存储的一部分,例如参见Do I need to store the salt with bcrypt?上的答案