web-dev-qa-db-fra.com

NodeJS: bcrypt vs crypto natif

Quelqu'un peut-il indiquer les différences entre les deux et des exemples de situations dans lesquelles ils sont utilisés? 

bcrypt a fière allure.

44
fancy

Utilisez bcrypt à l'endroit où vous souhaitez effectuer un hachage lent et coûteux en calcul - il s'agira généralement des hachages pour lesquels vous ne voulez vraiment pas qu'un attaquant puisse inverser le hachage, par exemple mots de passe utilisateur. Utilisez la crypto native pour tout le reste.

60
Mike Scott

En complément de la réponse de @ mike-scott, vous devriez préférer bcrypt pour les éléments relatifs aux mots de passe, mais vous pouvez néanmoins utiliser crypto pour un large éventail de tâches telles que la création de 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); 
17
Igor Parra

J'utiliserais la bibliothèque de chiffrement native de nodejs

Je pense que la décision ne devrait pas être uniquement basée sur qui fait quoi mieux, mais bien plus que cela

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

La raison en était que la cryptographie constituait un aspect important de la sécurité. En utilisant un module externe de npm, un code malveillant pourrait être injecté, ce qui irait à l'encontre de l'objectif de sécurité initial.

Il faut donc une bibliothèque de confiance pour cette fonction cryptographique, ce qui a motivé les nœuds à fournir une telle bibliothèque.

Si vous pensez que la méthode cryptographique n'est pas efficace, il vaut mieux poser problème à nodejs à propos de la même chose plutôt que de faire confiance à une bibliothèque externe.

Tu ne me crois toujours pas? lire cet article https://hackernoon.com/im-harvesting-credit-card-numbers-and-passwords-de-votre-site-here-s-how-9a8cb347c5b5

0
Basav