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

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

bcrypt.genSalt(rounds,cb)

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

cb – [REQUIRED] – 一旦产生盐,就会触发callback。 使用eio使其asynchronous。 err – callback的第一个参数,详述任何错误。 salt – 提供生成的盐的callback的第二个参数。

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

有人可以解释一下在bcrypt.genSalt(rounds,cb)rounds的重要性吗? 另外会发生什么如果我把这个回合调到一个更小的数值到10或10以上?

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

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

你应该testing和select一个数字 – 大概在10到20之间 – 这需要几分之一秒,也许是200毫秒。 从技术上来说,为了获得最佳的安全性,你应该尽可能地使用一个数字,而不会影响用户的体验,因为这是完成一个完整散列所花费的时间,这使得bcrypt能够有效地抵御散列存储中的强制密码。

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

我发现在运行unit testing时使用1的值非常有用 – 它使创buildtesting用户数据和testing用户login速度更快,因此您可以在更短的时间内运行更多的unit testing。