为什么不需要盐来比较bcrypt中的密码是否正确?
Why isn't salt required to compare whether password is correct in bcrypt?
我想在将密码存储到数据库之前使用 node.js bcrypt 对密码进行哈希处理。
此 link 提供文档。
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
?既然hash是用salt生成的,为什么明文密码比对不涉及hash时用的原始salt?
salt 是 bcrypt 存储在数据库中的字符串的一部分,例如参见 [=10=]
上的答案
我想在将密码存储到数据库之前使用 node.js bcrypt 对密码进行哈希处理。
此 link 提供文档。 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
?既然hash是用salt生成的,为什么明文密码比对不涉及hash时用的原始salt?
salt 是 bcrypt 存储在数据库中的字符串的一部分,例如参见 [=10=]
上的答案