使用Rust bcrypt crate时,bcrypt是否存在密码长度限制?
Rust bcrypt库密码长度限制解惑
核心结论:你没有理解误区,原始bcrypt确实存在72字节的输入限制,但Rust的bcrypt crate做了额外兼容处理,所以能支持更长的密码。
具体细节:
- 原始bcrypt算法的设计只接受最多72字节的输入,超过该长度的部分会被直接截断,不参与哈希计算。这里要注意是字节数而非字符数——比如UTF-8编码的中文每个字符占3字节,对应最多24个中文字符。
- Rust的bcrypt crate内部对长密码做了适配:当输入密码的字节长度超过72时,它会先对原始密码进行SHA-256哈希,得到一个32字节的哈希值,再将这个哈希值作为bcrypt的输入进行处理。这就绕开了原始算法的长度限制,所以你能成功哈希105字符的密码。
- 官方文档未提及该限制,是因为库已默认处理了长密码场景,没有特意强调这一实现细节,但这并不代表原始bcrypt的长度限制不存在。
开发建议:
- 若要严格遵循传统bcrypt的行为逻辑,需要在业务层限制密码的字节长度不超过72;
- 若依赖当前库的预哈希处理逻辑,可以支持任意长度的密码,但要清楚此时bcrypt哈希的是原始密码的SHA-256值,而非原始密码本身;
- 可以查看该crate的源码确认这一处理流程——
hash函数中会判断输入长度,触发不同的处理分支。
内容的提问来源于stack exchange,提问作者sudoExclamationExclamation
相关产品推荐
相关产品推荐

