我使用密码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