我对 bcrypt 感到困惑,我认为我需要存储我的盐,然后将我的纯文本密码 + 盐与散列密码进行比较,但是从文档来看,它看起来根本不需要存储盐。事实上,我使用这段代码来创建盐和散列密码:
let salt = await bcrypt.genSalt(10);
const saltpasshash = await new Promise((resolve, reject) => {
bcrypt.hash(plain_text_password, salt, function(err, hash) {
if (err) reject(err)
resolve(hash)
});
})
//NOTE I SAVE saltpasshash as users pass and the salt in a separate field in the users table.
这行得通,我感到困惑的是,如果我进行如下比较,它将返回一个有效结果:
valid = await bcrypt.compare(plain_text_password, user.saltpasshash);
我很困惑为什么当我不提供盐时这会有效,如果是这样,为什么要储存盐呢?