我使用密碼https://nodejs.org/api/crypto.html進行密碼加密和身份驗證。我正在修改密碼頁面,並且在確定用戶提供的密碼是否與現有密碼相同時存在問題。以下是我的代碼。比較兩個密碼哈希值 - 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);
我在等待上面的控制檯消息打印真實的地方,現有的用戶密碼匹配。但是,這兩個哈希似乎完全不匹配。請問我錯過了什麼?如何做到這一點?我想確保用戶密碼與他現有的密碼匹配,然後他可以更改新的密碼。任何幫助,將不勝感激。
哦謝謝iwein,所以我應該使用相同的鹽的權利。我的意思是代替創建新鹽,我應該使用現有密碼中的一個。 ? –
@NuruSalihu是的,這就是我的理解。如果你的鹽被盜,你必須重置所有密碼並重新生成鹽。通常加密庫允許你比較一遍而不再傳遞一個鹽(他們將鹽存儲在散列傳遞中)。 bcrypt這樣做例如http://stackoverflow.com/questions/6832445/how-can-bcrypt-have-built-in-salts – iwein