为什么BCryptPasswordEncoder的强度在4到31之间?

时间:2017-01-09 07:21:09

标签: spring-security bcrypt

根据docs

使用BCrypt强哈希函数的PasswordEncoder的实现。客户端可以选择提供“强度”(在BCrypt中的日志轮次)和SecureRandom实例。强度参数越大,散列密码的工作量(指数式)就越多。默认值为10.

1 个答案:

答案 0 :(得分:11)

强度被转换为迭代。对于强度x,将有 2 x 迭代。假设实现使用无符号32位整数,其中最大值为4294967295.如果x大于31,2 x 大于此最大值,则会发生溢出。

实际上,Spring Security中的Java实现实际上使用的是64位long,因为整数在Java中是签名的(最多int是2 31 -1)。

强度为31或接近非常慢,无论如何都无法使用。