que actualmente usan siguiente configuración para registrar nuevos usuarios:Node.js: contraseña crypto.pbkdf2 a Hex
// 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));
});
});
Tome una mirada más cercana a esta línea:
user.password = (encodedPassword.toString('hex'));
Esto debe codificar el cadena de contraseña (que parece una binaria) en una cadena hexagonal. Por alguna razón, esto no funciona.
¿Por qué no?
BySide: Qué es la codificación Recommand de sal y de almacenamiento de contraseñas (hexadecimal, binario, base 64)?
Para la nota al lado encontré un hilo que recomiende base64 sobre hexadecimal porque es más corto (2.2 a 1.3 en relación con pulido, binario) – bodokaiser
Recibí un montón de trampa como salida de esa función. Como tampoco tengo ni idea de cómo manejar eso, entiendo por qué 'toString ('hex')' fallaría. ¡Buena suerte! –
Nota: parece que le devuelven una cadena que contiene todo tipo de caracteres. Primero intente convertir a matriz de bytes (verifique el flujo de pila) y luego conviértalo en hexadecimal. Odio los idiomas que no entienden la diferencia entre cadenas y bytes, y JavaScript es ciertamente muy alto en esa lista de vergüenza. –