Может ли кто-нибудь указать различия между двумя примерами ситуаций, в которых они используются?
bcrypt отлично выглядит.
Ответ 1
Используйте bcrypt, где вы хотите делать медленное и дорогостоящее хэширование, основанное на вычислениях, - это, как правило, для хэшей, где вы действительно не хотите, чтобы злоумышленник мог изменить хэш, например. паролей пользователей. Используйте собственный криптографический код для всего остального.
Ответ 2
В сочетании с ответом @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);