NodeJS:bcrypt vs native crypto

时间:2011-08-05 05:34:44

标签: node.js cryptography bcrypt

有人可以指出两者之间的差异以及使用每种情况的示例情况吗?

bcrypt看起来很棒。

3 个答案:

答案 0 :(得分:63)

使用bcrypt进行缓慢且计算成本较高的哈希 - 这通常适用于您真正不希望攻击者能够反转哈希的哈希,例如:用户密码。使用原生加密技术来实现其他目标。

答案 1 :(得分:17)

与@ 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); 

答案 2 :(得分:1)

我会使用nodejs的原生加密库

我认为这个决定不应仅仅基于谁做得更好,而是基于什么

你应该知道为什么node.js包含了一个用于加密的内置模块,虽然它最初不是node.js的一部分,并且许多库在npm存储库中很流行,包括bcrypt

原因是,加密是一个重要的安全方面,使用来自npm的外部模块可能会注入恶意代码,这会破坏原有的安全目标

因此需要一个受信任的库来实现这种加密功能,这是nodejs提供这样一个库的动机

如果您认为加密方法不强,最好在nodejs上提出相同的问题,而不是盲目地信任外部库

还是不相信我?阅读这篇文章https://hackernoon.com/im-harvesting-credit-card-numbers-and-passwords-from-your-site-here-s-how-9a8cb347c5b5