Node.js:crypto.pbkdf2密码为十六进制

Node.js: crypto.pbkdf2 password to hex

本文关键字:密码 十六进制 pbkdf2 crypto js Node      更新时间:2023-11-15

我目前使用以下设置来注册新用户:

// creates a new user
app.post('/users', function(req, res) {
    // create new user
    var user = new User();
    // assign post
    user.username = req.body.username;
    user.email = req.body.email;
    crypto.randomBytes(32, function(err, buf) {
        if (err) throw err;
        user.salt = buf.toString('hex');
        crypto.pbkdf2(req.body.password, user.salt, 25000, 512, function(err, encodedPassword) {
            if (err) throw err;
            user.password = (encodedPassword.toString('hex')); // this line
            user.save(function(err, user) {
                if (!err) return res.send(err, 500);
                return res.json(user);
            });
        }.bind(this));
    });
});

仔细看一下这条线:

user.password = (encodedPassword.toString('hex'));

这应该将密码字符串(看起来像二进制字符串)编码为十六进制字符串。出于某种原因,这不起作用。

为什么不呢?

旁路:对于salt和密码存储(十六进制、二进制、base64),建议使用什么编码?

如果它已经是一个字符串,那么toString('hex')将不起作用。

我做的是类似Buffer(encodedPassword, 'binary').toString('hex')的事情。