bcrypt会用完超长密码吗?

时间:2026-11-07 编辑:lili

bcrypt处理超长密码时需要特别核对字节边界,不能假设每个输入字符都会参与计算。常见实现只使用前72字节,也有库选择拒绝超长输入。应用应明确所用实现的行为与输入政策,不能仅靠界面允许粘贴更长文字,就断言全部内容已被密码哈希覆盖。

bcrypt哈希校验:KKCE本轮实操2026年11月7日,www.kkce.com 操作截图。保持原哈希,改动第73个ASCII字节后仍匹配;补图为原输入的匹配结果。KKCE为72个A后接X生成并校验教学哈希主图更换尾字节为Y,沿用同一完整哈希,不重新生成随机盐。

在固定哈希上只改变末尾一个字节

通过快快测bcrypt校验将72个A后接X,按Cost 10生成哈希并验证通过;保留该哈希,再把末尾X改成Y,仍得到匹配提示。两串均为73个ASCII字节,前72字节完全相同。截图输入框按密码形式遮蔽,具体样例已在此公开说明。

这次结果说明的是输入被如何处理

测试没有重新生成第二个哈希,因此不同随机盐不会干扰这个对照。末尾变化未影响匹配,符合该实现对超出72字节部分的处理。它不表示两个任意密码都能匹配,也不构成对其他版本密码库行为的断言。

72字节不是72个可见文字

ASCII样例通常每字符一个字节,而UTF-8汉字或其他符号会占更多字节。若仅按界面字符数限制,可能无法反映哈希输入边界。应在注册、修改与验证流程采用一致的编码和长度规则,明确提示,避免静默丢弃用户以为有效的尾部。

方案变更要遵循维护库的迁移方法

需要支持更长密码时,应选择经过审查的算法及实现方案,不宜临时拼装预哈希步骤。快快测适合复现公开边界样例,实际账户密码只在认证系统内处理。本轮没有测试真实账户,输入值与哈希均为教学用途。