2011-08-05 14 views

risposta

48

Usa bcrypt dove vuoi fare hashing lento e computazionalmente costoso - questo sarà generalmente per hash dove in realtà non vuoi che un attaccante sia in grado di invertire l'hash, ad es. password utente. Usa la crittografia nativa per tutto il resto.

+3

Ti piacerebbe approfondire il motivo per cui bcrypt è migliore/più forte? Presumo che usi un hash più forte/più lungo? Utilizza un algoritmo diverso? Se è così dato due password simili, una hash con crittografia nativa e una con bcrypt qual è il costo stimato in tempo per l'inversione dell'hash? –

+5

Bcrypt utilizza l'algoritmo Blowfish, che ha una fase di impostazione della chiave computazionalmente costosa. Quindi lo modifica per consentire all'impostazione della chiave di essere ripetuta un numero configurabile di volte - in genere qualcosa come 4.096 al momento, ma può essere aumentata quando l'hardware diventa più potente. La differenza di difficoltà dell'hashing inverso tra bcrypt e un hash regolare dipende quindi dalla configurazione di bcrypt. –

12

Nel compagno con la @ Mike-scott risposta, si dovrebbe preferire bcrypt per cose relative password, ma ancora si può utilizzare crypto per una vasta gamma di compiti come creare gettoni casuali o un checksum HMAC o SHA1/MD5 hash:

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