javascript - 使用加密的 Node.js 密码哈希 bcrypt 替代方案

标签 javascript node.js passwords cryptography bcrypt

我实际上是在使用 bcrypt 模块来散列和比较散列密码。

我想做的是删除 bcrypt 模块并使用默认的 crypto 库来哈希和比较密码。

这可能吗?

这会比使用 node-bcrypt 安全吗?

你有关于如何做的任何示例/教程/文档/链接吗?

或者我实际上这样做的例子:

bcrypt.hash(string,secret_key)
bcrypt.compare(string,string,secret_key);

如果可能的话,我只想用加密复制它:

crypto.hash(string,secret_key)
    crypto.compare(string,string,secret_key);

最佳答案

您可以使用加密库中的 pbkdf2 进行哈希运算:

crypto.pbkdf2(password, salt, iterations, keylen, digest, callback)

示例实现:

const crypto = require('crypto');
crypto.pbkdf2('secret', 'salt', 100000, 512, 'sha512', (err, derivedKey) => {
  if (err) throw err;
  console.log(derivedKey.toString('hex'));  // '3745e48...aa39b34'
});

这里是引用:https://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2_password_salt_iterations_keylen_digest_callback

它使用 HMAC 摘要算法(例如 sha512)从给定的密码、salt 和迭代中派​​生出给定长度的 key 。 pbkdf2 具有与 bcrypt 类似的慢速特性。使用 PBKDF2、bcrypt 或 scrypt,攻击者每秒只能进行几千次猜测(或更少,具体取决于配置)。

关于javascript - 使用加密的 Node.js 密码哈希 bcrypt 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22819861/

相关文章:

javascript - 删除对象数组中的重复元素 Javascript

JavaScript 事件.target IE8

node.js - 服务器时间和客户端时间——区别?

passwords - 多个密码哈希

javascript - 如何测试 jQuery 3.0 beta 是否在浏览器中兼容 Promises/A+?

javascript - 当另一个 div 展开时隐藏 div?

node.js - 有必要使用nodeexpress检查url中的参数吗?

ios - 为什么我的 Auth0 token 从 iOS 发送到 node.js 服务器时总是返回无效?

Java - 如何撤消 hashCode() 并读取为字符串?

c++ - 如何使用所有者密码但没有用户密码来解密 PDF?