bcrypt 比较需要一分多钟才能完成

问题描述 投票:0回答:2

我刚刚为 REST API 实现了用户身份验证,并使用 bcrypt 进行密码哈希处理。创建用户时我基本上会这样做

const passwordSalt: string = await genSalt(12);
const passwordHash: string = await hash('pAsSwOrD', passwordSalt);

并将哈希值保存到数据库中。稍后,当用户登录时,我会将提供的密码与数据库密码哈希进行比较。

const passwordMatches: boolean = await compare('wRoNg pAsSwOrD', user.passwordHash);

我知道比较函数应该很慢,以帮助抵御暴力攻击。但比较功能需要一分多钟才能完成。用户不会等待它完成。那么我的代码有问题吗?

如果您需要更多信息,请告诉我。

node.js bcrypt
2个回答
0
投票

成本为 12 的 bcrypt 在任何真实计算机上花费的时间不应超过 1 秒。

这一定意味着您正在使用的 bcrypt 实现写得不是很好。

检查它不是 bcrypt 的好方法,尝试使用不同成本的调用:

成本 持续时间
3 67 毫秒
4 135 毫秒
5 270 毫秒
6 560 毫秒
7 1,130 毫秒
8 3,250 毫秒
9 7,500 毫秒
10 15,000 毫秒
11 30,000 毫秒
12 60,000 毫秒

0
投票

少用盐,如 2 至 5 圈。

const saltRounds = 2;
© www.soinside.com 2019 - 2024. All rights reserved.