我对 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);
我很困惑为什么当我不提供盐时这会有效,如果是这样,为什么要储存盐呢?