2011-08-05 15 views

Respuesta

48

Usa bcrypt donde quieras hacer un hashing lento y computacionalmente costoso: generalmente será para hashes en los que realmente no quieres que un atacante pueda revertir el hash, p. contraseñas de usuario Use criptografía nativa para todo lo demás.

+3

¿Te gustaría explicar más sobre por qué bcrypt es mejor/más fuerte? Supongo que usa un hash más fuerte/más largo? ¿Utiliza un algoritmo diferente? Si es así, da dos contraseñas similares, una hash con criptografía nativa y otra con bcrypt. ¿Cuál es el costo estimado a tiempo para la reversión hash? –

+5

Bcrypt usa el algoritmo Blowfish, que tiene una fase de configuración de clave computacionalmente costosa. A continuación, lo modifica para permitir que la configuración de la clave se repita un número configurable de veces, por lo general algo así como 4,096 en la actualidad, pero se puede aumentar a medida que el hardware se vuelve más poderoso. La diferencia en la dificultad de la mezcla inversa entre brypt y un hash regular depende de la configuración de brypt. –

12

En compañera con la @ mike-scott respuesta, se debe preferir bcrypt para la materia relacionada con la contraseña, pero todavía se puede utilizar crypto para una amplia gama de tareas como crear fichas al azar o una suma de comprobación HMAC o SHA1/hash MD5:

var crypto = require('crypto'); 

// random tokens 
var buf = crypto.randomBytes(16).toString('hex'); 
console.log('Random token of %d bytes in hexadecimal: %s', buf.length, buf); 
var buf = crypto.randomBytes(16).toString('base64'); 
console.log('Random token of %d bytes in base 64: %s', buf.length, buf); 

// a hashed message authentication checksum (HMAC) using a shared secret key 
var string = 'My coffee please'; 
var key = 'Right away sir'; 

var encrypted = crypto.createHmac('sha1', key).update(string).digest('hex'); 
console.log('Encrypting "%s" using passphrase "%s": %s', string, key, encrypted); 

// a MD5 hash 
var hashmd5 = crypto.createHash('md5').update(string).digest('hex'); 
console.log('The MD5 hash of "%s" is %s', string, hashmd5); 

// a SHA1 hash 
var hashsha1 = crypto.createHash('sha1').update(string).digest('hex'); 
console.log('The SHA1 hash of "%s" is %s', string, hashsha1);