使用crypto的Node.js密码哈希bcrypt替代方案

its*_*sme 7 javascript passwords cryptography bcrypt node.js

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

我想要做的是删除bcrypt模块并使用默认crypto库进行散列和比较密码.

这可能吗?

这比使用安全node-bcrypt吗?

你有关于怎么做的任何示例/教程/ doc/link?

或者我实际上是这样做的:

bcrypt.hash(string,secret_key)
bcrypt.compare(string,string,secret_key);
Run Code Online (Sandbox Code Playgroud)

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

crypto.hash(string,secret_key)
    crypto.compare(string,string,secret_key);
Run Code Online (Sandbox Code Playgroud)

Mas*_*sum 7

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

crypto.pbkdf2(password, salt, iterations, keylen, digest, callback)
Run Code Online (Sandbox Code Playgroud)

示例实施:

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

这里是参考:https://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2_password_salt_iterations_keylen_digest_callback

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

  • 请注意,使用 [oclHashcat with GPU's](http://hashcat.net/oclhashcat/) 或类似方法的攻击者每秒可以做出比您更多的猜测,除非您真的加快迭代速度。例如,一台配备 8x AMD R9 290Xstock 核心时钟的 PC 每秒可以进行或多或少 130 万次 PBKDF2-HMAC-SHA-1(password,salt,8192,20) 测试,即每 30 次 3.4E12 或 2^41 次猜测天。你必须增加你的迭代次数(或 BCrypt 工作系数)以更多地卷曲他们的风格。 (2认同)