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

Sur*_*tam 6 spring-security bcrypt

根据文件:

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

hol*_*s83 11

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

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

强度为31或接近它非常慢并且无论如何都不可用.