NodeJS: bcrypt vs native crypto

Czy ktoś może wskazać różnice między tymi dwoma a przykładowymi sytuacjami, w których używa się każdego z nich?

Bcrypt wygląda świetnie.

Author: fancy, 2011-08-05

3 answers

Użyj bcrypt tam, gdzie chcesz wykonywać wolne i kosztowne obliczeniowo hashowanie - będzie to zazwyczaj dla hashów, w których naprawdę nie chcesz, aby atakujący był w stanie odwrócić hash, np. hasła użytkowników. Użyj rodzimej krypto do wszystkiego innego.

 57
Author: Mike Scott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-05 05:43:48

W połączeniu z odpowiedzią @ mike-scott, powinieneś preferować bcrypt dla haseł, ale nadal możesz używać crypto do szerokiego zakresu zadań, takich jak tworzenie losowych tokenów lub sumy kontrolnej HMAC lub hashów 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); 
 14
Author: Igor Parra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-28 13:47:57

Użyłbym natywnej biblioteki kryptograficznej nodejsa

Myślę, że decyzja nie powinna opierać się tylko na tym, kto robi co lepiej, to znacznie więcej

Powinieneś wiedzieć dlaczego node.js zawierał wbudowany Moduł crypto, podczas gdy pierwotnie nie był częścią node.js i wiele bibliotek było popularnych w repozytorium npm, w tym bcrypt

Powodem było to, że kryptografia jest ważnym aspektem bezpieczeństwa, użycie zewnętrznego modułu z npm ma możliwość złośliwego kodu injected, który pokonuje oryginalny cel bezpieczeństwa

Stąd potrzeba zaufanej biblioteki dla takiej funkcji kryptograficznej, co było motywacją dla nodejs do udostępnienia takiej biblioteki

Jeśli uważasz, że metoda kryptograficzna nie jest silna, lepiej Zgłoś problem na nodejs o tym samym, zamiast ślepo ufać zewnętrznej bibliotece

Nadal mi Nie wierzysz? przeczytaj ten artykuł https://hackernoon.com/im-harvesting-credit-card-numbers-and-passwords-from-your-site-here-s-how-9a8cb347c5b5

 1
Author: Basav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-23 10:38:03