bcrypt 在 Nodejs 服务器上非常慢

Dja*_*ave 3 bcrypt node.js

我的文件中有以下代码test.js

const bcrypt = require("bcrypt");
const { performance } = require("perf_hooks");

let hash = "$2b$20$v38KOyF2WSaJI/wcxSKN6u1iyvjfOu.Tjs3QHKCW2O4nCt0rTUgMu";
let password = "7!E:J|8yvGw$v]xXfKngkUAw3]EQ?B";

async function checkPassword() {
  let t = performance.now();
  if (await bcrypt.compare(password, hash)) {
    console.log("Passed! ", performance.now() - t);
  } else {
    console.log("Failed! ", performance.now() - t);
  }
}

checkPassword();
Run Code Online (Sandbox Code Playgroud)

然后我跑node test.js

我得到的输出是:

Passed!  59178.30090880394          < for a correct password
Failed!  59386.33465099335          < for an incorrect password
Run Code Online (Sandbox Code Playgroud)

对于基本检查来说,这几乎是一分钟!这是预期的结果吗?

我的 package.json 使用的是:

"dependencies": {
  "bcrypt": "^5.0.0",
  ...
Run Code Online (Sandbox Code Playgroud)

我在控制台中没有收到任何错误,一切都正确完成。我要散列的密码是

7!E:J|8yvGw$v]xXfKngkUAw3]EQ?B
Run Code Online (Sandbox Code Playgroud)

是不是太长了?我不完全理解它是如何bcrypt工作的,以防不明显!

Ian*_*oyd 6

这是你的问题:

$2b$20$v38KOyF2WSaJI/wcxSKN6u1iyvjfOu.Tjs3QHKCW2O4nCt0rTUgMu
Run Code Online (Sandbox Code Playgroud)

这意味着:

  • 版本:2b
  • 成本系数:20

成本因素 20

在当前硬件上,成本因子 12 大约需要 250 毫秒。

成本 时间
12 250毫秒
13 500毫秒
14 1秒
15 2秒
16 4秒
17 号 8秒
18 16秒
19 32秒
20 54秒