私はbcryptと混同しています。saltを保存し、プレーンテキストのパスワード+ saltをハッシュされたパスワードと比較する必要があると思いますが、ドキュメントからは、saltを保存する必要はまったくないようです。実際、私はこのコードを使用して、saltおよびハッシュされたパスワードを作成しました。
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);
私がソルトを提供していないのになぜこれが有効であるのか、そしてもしそうなら、なぜソルトをまったく保存するのかについて混乱しています。
...残りのハッシュ文字列includesコストパラメータ128ビットソルト(22文字としてエンコードされたRadix-64)、および結果のハッシュ値の184ビット(31文字としてエンコードされたRadix-64)
したがって、ソルトは出力文字列に自動的に含まれます。つまり、自分で追加する必要はありません。