无法理解bcrypt npm包中的bcrypt.genSalt

时间:2015-07-17 07:04:44

标签: node.js npm

您好我最近在我的项目中使用了bcrypt npm包的bcrypt.genSalt。使用bcrypt.genSalt的基本思路是为我的密码生成Salt,需要加密。使用bcrypt.genSalt的语法如下

bcrypt.genSalt(rounds,cb)

轮次 - [可选] - 处理数据的成本。 (默认 - 10)

cb - [必需] - 生成salt后将触发的回调。使用eio使其异步。 错误 - 回调的第一个参数,详细说明任何错误。 salt - 提供生成的盐的回调的第二个参数。

出于好奇,我在 bcrypt.genSalt(rounds,cb)中将回合参数从 10 更改为 1024 并发现我的API无法执行 bcrypt.genSalt(rounds,cb)。我不得不在DHC中止我的Post操作。

有人可以在 bcrypt.genSalt(rounds,cb)中解释回合的重要性吗?如果我操纵 轮次到较小值10或10以上会发生什么?

1 个答案:

答案 0 :(得分:2)

bcrypt中的rounds参数是对数的。在bcrypt中完成的重复哈希循环的实际数量是Math.pow(2,rounds)

所以Math.pow(2,1024)是一个非常大的数字,你的处理将无法在数百万年内完成!

你应该测试并选择一个数字 - 可能在10到20之间 - 只需要几分之一秒,也许是200毫秒。从技术上讲,为了获得最佳安全性,您应该使用尽可能高的数字而不影响用户体验,因为这是执行一个完整哈希所需的时间,这使得bcrypt成为有效保护,以防止来自哈希存储的暴力破解密码。< / p>

选择低于10的值不会损害您的用户体验,但是攻击密码表的人会有一个优势,并且可能能够在给定时间内扫描更常见的密码。

我发现在运行单元测试时使用值1非常有用 - 它使得创建测试用户数据和测试用户登录的速度更快,因此您可以在更短的时间内运行更多的单元测试。