有人可以指出两者之间的差异以及使用它们的示例情况吗?
bcrypt看起来很棒。
在您想要执行缓慢且计算成本高昂的哈希值的地方使用 bcrypt ——这通常适用于您确实不希望攻击者能够反转哈希值的哈希值,例如用户密码。使用本机加密来处理其他所有事情。
我会使用 Node.js 的原生加密库
我认为决定不应该仅仅基于谁做得更好,而远不止于此
你应该知道为什么 Node.js 包含一个内置的 crypto 模块,而它最初并不是 Node.js 的一部分,而且许多库在 npm 存储库中很受欢迎,包括 bcrypt
原因是,密码学是一个重要的安全方面,使用npm的外部模块有可能注入恶意代码,这违背了最初的安全目标
因此需要一个可信的库来实现这样的加密功能,这也是 Node.js 提供这样一个库的动机
如果你认为加密方法不强,最好在 Node.js 上提出同样的问题,而不是盲目信任外部库
还是不相信我?阅读这篇文章https://hackernoon.com/im-harvesting-credit-card-numbers-and-passwords-from-your-site-here-s-how-9a8cb347c5b5
与 @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版本scrypt来自加密模块的函数可用于散列密码。
这来自nodejs文档: Scrypt 是一种基于密码的密钥派生函数,其设计在计算和内存方面都非常昂贵,以便使暴力攻击变得无益。
根据我的说法,bcrypt 更好,我制作的网站之一是 Mern 电子商务网站,另一个是 Mern 社交网络,并且 bcrypt 提供了比 crypto 更好的功能,据您说
npm install bcrypt