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

标签 spring-security bcrypt

根据docs:

使用BCrypt强哈希函数的PasswordEncoder的实现。客户端可以选择提供“强度”(在BCrypt中也称为日志回合)和SecureRandom实例。强度参数越大,将必须对哈希密码进行更多的工作(以指数形式)。预设值为10。

最佳答案

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

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

31或更高的强度非常慢,反正无法使用。

关于spring-security - 为什么BCryptPasswordEncoder的强度在4到31之间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41542872/

相关文章:

grails - 使用Grails和Acegi插件捕获登录/注销和登录尝试

java - Spring 应用程序对 keycloak 的基本身份验证

grails - 在我的 gsp 中,<sec :username/> returns empty value

java - 带有 BCrypt 哈希的 AES 256。如何从数据库中查看用户密码?

ruby-on-rails - 无法安装 gem - 无法构建 gem native 扩展 - 无法加载此类文件 -- mkmf (LoadError)

java - Spring Security登录错误状态404-/j_spring_security_check

Spring-Security x509 X509PrincipalExtractor

.net - 如何使用 .Net 实现 SQL Server 的 BCrypt?

asp.net-mvc-3 - 与 BCrypt.net 合作

c# - 使用 BCrypt 将 PHP 转换为 C#