我的文件中有以下代码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工作的,以防不明显!
这是你的问题:
$2b$20$v38KOyF2WSaJI/wcxSKN6u1iyvjfOu.Tjs3QHKCW2O4nCt0rTUgMu
Run Code Online (Sandbox Code Playgroud)
这意味着:
在当前硬件上,成本因子 12 大约需要 250 毫秒。
| 成本 | 时间 |
|---|---|
| 12 | 250毫秒 |
| 13 | 500毫秒 |
| 14 | 1秒 |
| 15 | 2秒 |
| 16 | 4秒 |
| 17 号 | 8秒 |
| 18 | 16秒 |
| 19 | 32秒 |
| 20 | 54秒 |