带加密的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

回到顶部