BCrypt无法检测超长密码末尾修改问题求助
问题原因与解决方案
核心原因
org.mindrot:jbcrypt:0.4 版本存在关键限制:它只会使用密码的前72个字符进行哈希计算,超出72位的部分会被直接截断忽略。
对应你的代码场景
你提供的原密码长度远超过72位,而password.dropLast(10)得到的modified密码,其前72个字符和原密码完全一致。由于BCrypt验证时只校验前72位,所以会错误地认为modified密码和原密码匹配,导致最后一个断言失败。
解决办法
- 升级jBCrypt版本:0.5及以上的版本已经修复了这个长度截断问题,会完整处理任意长度的密码,直接升级依赖即可解决。
- 兼容旧版本的临时方案:如果无法升级依赖,可以先对超长密码做一次单向哈希(比如SHA-256),将哈希后的字符串作为密码传入BCrypt进行哈希和验证。这样即使原密码仅末尾不同,经过前置哈希后也会生成不同的输入,避免验证错误。
内容的提问来源于stack exchange,提问作者SomeKoder
相关产品推荐
相关产品推荐

