带加密的nodejs中的SALT和HASH密码
我试图弄清楚如何使用crypto模块对nodejs中的密码进行加盐和哈希处理。我可以这样做来创建哈希密码:
UserSchema.pre('save', function(next) { var user = this;
var salt = crypto.randomBytes(128).toString('base64');
crypto.pbkdf2(user.password, salt, 10000, 512, function(err, derivedKey) {
user.password = derivedKey;
next();
});
});
但是我对以后如何验证密码感到困惑。
UserSchema.methods.validPassword = function(password) { // need to salt and hash this password I think to compare
// how to I get the salt?
}
回答:
在您使用的任何持久性机制(数据库)中,您都将在哈希值和迭代次数之间存储结果哈希,这两者都是纯文本。如果每个密码使用不同的盐(您应该这样做),则还必须保存该信息。
然后,您将比较新的纯文本密码,使用相同的盐(和迭代次数)对其进行哈希处理,然后将字节序列与存储的密码进行比较。
function hashPassword(password) { var salt = crypto.randomBytes(128).toString('base64');
var iterations = 10000;
var hash = pbkdf2(password, salt, iterations);
return {
salt: salt,
hash: hash,
iterations: iterations
};
}
function isPasswordCorrect(savedHash, savedSalt, savedIterations, passwordAttempt) { return savedHash == pbkdf2(passwordAttempt, savedSalt, savedIterations);
}
以上是 带加密的nodejs中的SALT和HASH密码 的全部内容, 来源链接: utcz.com/qa/413216.html