パスワードの暗号化と認証に暗号https://nodejs.org/api/crypto.htmlを使用しています。私はパスワード変更ページで作業しており、ユーザーが提供するパスワードが既存のパスワードと同じハッシュを持っているかどうかを判断する問題を抱えています。以下は私のコードです。2つのパスワードハッシュを比較する - nodejs
var createSalt = function createSalt() {
return crypto.randomBytes(128).toString('base64');
};
var hashPwd = function hashPwd(salt, pwd) {
var hmac = crypto.createHmac('sha256', salt);
return hmac.update(pwd).digest('hex');
};
//use password , create salt, hash and compare with the existing
var salt = createSalt();
var passHash = hashPwd(salt,data.Password);
console.log('the password is', user.PassHash === passHash);
上記のコンソールメッセージが既存のユーザーパスワードと一致する場合は、真であると予想されます。しかし、2つのハッシュはまったく一致していないようです。どうしたらいいですか?どのようにこれを達成するのですか?私は、新しいパスワードを変更する前に、ユーザーのパスワードが既存のパスワードと一致していることを確認したい。どんな助けもありがとう。
ああおかげで、私は同じ塩権を使用する必要があります。も参照してください。私は新しい塩を作る代わりに、私は既存のパスワードのものを使うべきだということを意味します。 ? –
@NuruSalihuうん、それは私がそれを理解する方法です。あなたの塩が盗まれた場合は、すべてのパスワードをリセットして塩を再生成する必要があります。しばしば暗号ライブラリは、あなたが再び塩を渡さずにパスを比較することができます(彼らはハッシュされたパスの中に塩を保存します)。 bcryptはこれをたとえばhttp://stackoverflow.com/questions/6832445/how-can-bcrypt-have-built-in-saltsで行います。 – iwein