嗨,我最近在我的项目中使用了 bcrypt npm 包的 bcrypt.genSalt。使用 bcrypt.genSalt 的基本思想是为需要加密的密码生成 Salt。使用 bcrypt.genSalt 的语法如下
bcrypt.genSalt(回合,CB)
rounds - [可选] - 处理数据的成本。(默认 - 10)
cb - [REQUIRED] - 生成盐后要触发的回调。使用 eio 使其异步。 err - 详细说明任何错误的回调的第一个参数。 salt - 回调的第二个参数,提供生成的盐。
出于好奇,我改变了几轮参数从10到1024的bcrypt.genSalt(轮,CB) ,并发现我的API无法执行bcrypt.genSalt(轮,CB)。我不得不放弃在DHC我的岗位操作.
有人可以解释轮次在bcrypt.genSalt(rounds, cb) 中的重要性吗?另外,如果我将轮数操纵到 10 或大于 10 的较小值,会发生什么?
roundsbcrypt 中的参数是对数的。在 bcrypt 中完成的重复散列循环的实际数量是Math.pow(2,rounds)
所以Math.pow(2,1024)是一个非常大的数字,您的处理不会在数百万年内完成!
您应该测试并选择一个数字 - 可能在 10 到 20 之间 - 这需要几分之一秒,可能是 200 毫秒。从技术上讲,为了获得最佳安全性,您应该在不影响用户体验的情况下使用尽可能高的数字,因为这是完成一个完整散列所需的时间,这使得 bcrypt 能够有效地防止来自散列存储的暴力破解密码。
选择一个低于 10 的值不会损害您的用户体验,但攻击密码表的人会有优势,并且可能能够在给定时间内扫描更常见的密码。
我发现在运行单元测试时使用值 1 非常有用 - 它可以更快地创建测试用户数据和测试用户登录,因此您可以在更短的时间内运行更多单元测试。