2011-08-05 19 views

Odpowiedz

48

Użyj bcrypt, gdzie chcesz robić powolne i kosztowne pod względem obliczeniowym hashing - zwykle będzie to dotyczyło skrótów, w których naprawdę nie chcesz, aby atakujący mógł odwrócić hash, np. hasła użytkowników. Użyj natywnego krypto na wszystko inne.

+3

Czy chciałbyś dokładniej wyjaśnić, dlaczego bcrypt jest lepszy/silniejszy? Zakładam, że używa silniejszego/dłuższego hasha? Czy używa innego algorytmu? Jeśli tak podano dwa podobne hasła, jeden zaszyfrował z natywnym kryptografem, a drugi z bcrypt, jaki jest szacowany koszt w czasie odwrócenia hasza? –

+5

Bcrypt używa algorytmu Blowfish, który ma kosztowną kosztowo fazę konfiguracji klucza. Następnie modyfikuje go w celu umożliwienia wielokrotnego konfigurowania konfiguracji klucza - zwykle około 4 096 obecnie, ale można go zwiększyć, gdy sprzęt staje się potężniejszy. Różnica w trudności wstecznego mieszania między bcrypt a zwykłym hashem zależy więc od konfiguracji bcrypt. –

12

W towarzysz z @ mike-Scott odpowiedź, powinniśmy wolisz bcrypt dla haseł związanych z rzeczy, ale nadal można używać crypto dla szerokiego zakresu zadań, takich jak tworzenie losowych znaków lub sumę kontrolną HMAC lub SHA1/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);