NodeJS: bcrypt против собственного крипто

может ли кто-нибудь указать на различия между этими двумя и примерами ситуаций, в которых используется каждый?

bcrypt выглядит великолепно.

3 ответов


используйте bcrypt, где вы хотите делать медленное и вычислительно дорогое хеширование - это, как правило, будет для хэшей, где вы действительно не хотите, чтобы злоумышленник мог отменить хэш, например, пароли пользователей. Используйте native crypto для всего остального.


в компаньоне с ответом @mike-scott, вы должны предпочесть bcrypt для связанных с паролем вещей, но все же вы можете использовать crypto для широкого спектра задач, таких как создание случайных токенов или контрольной суммы HMAC или хэшей 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); 

Я бы использовал родную криптографическую библиотеку nodejs

Я думаю, что решение не должно быть основано только на том, кто делает что лучше, это гораздо больше, чем это

вы должны знать, почему узел.js включил встроенный модуль для криптографии, в то время как он изначально не был частью узла.js и многие библиотеки были популярны в репозитории npm, включая bcrypt

причина в том, что криптография является важным аспектом безопасности, использование внешнего модуля от npm имеет возможность вводится вредоносный код, который побеждает оригинальную цель безопасности

следовательно, нужна доверенная библиотека для такой криптографической функции, которая была мотивацией для nodejs предоставить такую библиотеку

Если вы думаете, что криптографический метод не силен, лучше поднять вопрос о nodejs о том же, а не слепо доверять внешней библиотеке

все еще не веришь мне? читать эту статью https://hackernoon.com/im-harvesting-credit-card-numbers-and-passwords-from-your-site-here-s-how-9a8cb347c5b5