NodeJS: bcrypt vs crypto natif

Quelqu'un peut-il souligner les différences entre les deux situations et les exemples où utiliser chacune?

Bcrypt est superbe.

42
demandé sur fancy 2011-08-05 09:34:43

3 réponses

Utilisez bcrypt où vous voulez faire un hachage lent et coûteux en calcul-ce sera généralement pour les hachages où vous ne voulez vraiment pas qu'un attaquant puisse inverser le hachage, par exemple les mots de passe utilisateur. Utilisez crypto natif pour tout le reste.

57
répondu Mike Scott 2011-08-05 05:43:48

En complément de la réponse de @mike-scott, vous devriez préférer bcrypt pour les éléments liés au mot de passe, mais vous pouvez toujours utiliser crypto pour un large éventail de tâches comme créer des jetons aléatoires ou une somme de contrôle HMAC ou des hachages 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
répondu Igor Parra 2014-12-28 13:47:57

J'utiliserais la bibliothèque cryptographique native de nodejs

Je pense que la décision ne devrait pas être simplement basée sur qui fait quoi de mieux, c'est beaucoup plus que cela

Vous devriez savoir pourquoi node.js inclus un module intégré pour crypto, alors qu'il ne faisait pas partie à l'origine de node.js et de nombreuses bibliothèques étaient populaires dans le référentiel npm, y compris bcrypt

La raison en était, la cryptographie est un aspect de sécurité important, l'utilisation d'un module externe de npm a la possibilité de code malveillant injecté, ce qui va à l'encontre de l'objectif de sécurité d'origine

Par conséquent besoin d'une bibliothèque de confiance pour une telle fonction cryptographique, ce qui était la motivation pour nodejs de fournir une telle bibliothèque

Si vous pensez que la méthode cryptographique n'est pas forte, il vaut mieux soulever un problème sur nodejs à peu près pareil au lieu de faire aveuglément confiance à une bibliothèque externe

Vous ne me croyez toujours pas? lire cet article https://hackernoon.com/im-harvesting-credit-card-numbers-and-passwords-from-your-site-here-s-how-9a8cb347c5b5

1
répondu Basav 2018-03-23 10:38:03