2012-07-19 22 views
5

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)?

+0

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

+0

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! –

+1

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. –

Respuesta

9

Parece que si ya es un String, el toString ('hex') no funcionará.

Lo que hice fue algo así como Buffer(encodedPassword, 'binary').toString('hex').