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