BCryptPasswordEncoder 密码长度是不是限制超过 72 个字符?

Posted

技术标签:

【中文标题】BCryptPasswordEncoder 密码长度是不是限制超过 72 个字符?【英文标题】:Is BCryptPasswordEncoder's password length limit more than 72 characters?BCryptPasswordEncoder 密码长度是否限制超过 72 个字符? 【发布时间】:2018-09-30 17:32:52 【问题描述】:

I saw a post that bcrypt has 72 characters limit. 所以我测试了 Spring security 的BCryptPasswordEncoder 看看会发生什么。我尝试了超过 1000 的长度,它工作正常。甚至没有警告日志。

我尝试了 JavaDoc 和在线文档,但找不到关于输入长度限制的信息。

BCryptPasswordEncoder 的密码长度是否限制超过 72 个字符?如果是这样,我可以在我的网络应用程序中使用它吗?

【问题讨论】:

【参考方案1】:

BCryptPasswordEncoder 似乎在没有任何警告的情况下裁剪密码。

我尝试使用 BCrypt 而不是这样的 BCryptPasswordEncoder

@Test
public void testBcrypt() throws Exception 
    final String pw1_a71 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
    final String pw2 = pw1_a71 + "b";
    final String pw3 = pw2 + "b";
    final String pw4 = "b" + pw2;

    final String gensalt = BCrypt.gensalt();
    for (final String pw : Arrays.asList(pw1_a71, pw2, pw3, pw4)) 
        System.out.println(BCrypt.hashpw(pw, gensalt));
    

输出:

$2a$10$9S6TbAreOnBH1ZCdZ.G0WOBxiIEizo92CNeFFBlcg1bxyGa9mMgEu
$2a$10$9S6TbAreOnBH1ZCdZ.G0WO4Pm8wq3zRnVR6szbZynp8DHOq3XCwoW
$2a$10$9S6TbAreOnBH1ZCdZ.G0WO4Pm8wq3zRnVR6szbZynp8DHOq3XCwoW
$2a$10$9S6TbAreOnBH1ZCdZ.G0WOCC3kvOwtnzVpiEmOWvIA6WIKzxi7lhy

【讨论】:

以上是关于BCryptPasswordEncoder 密码长度是不是限制超过 72 个字符?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring Security BCryptPasswordEncoder 对密码进行哈希处理时凭据错误

BCryptPasswordEncoder 加密算法解析

springboot+security 的BCryptPasswordEncoder 使用

Spring Boot BCryptPasswordEncoder 编码密码看起来不像 BCrypt

BCryptPasswordEncoder加密

BCryptPasswordEncoder加密