You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

更换盐值无效果:为什么不同盐值生成的bcrypt密码哈希没有变化?

bcrypt不同盐值生成相同哈希的原因

这一现象是bcrypt的盐值编码规则导致的,属于设计上的正常表现,不是安全问题也不是工具bug。

核心原理说明

  • bcrypt要求输入的盐固定为16字节(128比特)长度,对外输入/展示时会使用base64编码为固定22个字符的格式。
  • 每个base64字符对应6比特信息,22个字符总比特数为22 * 6 = 132比特,比实际需要的128比特多了4比特,这多余的4比特在解码时会被直接丢弃,不会参与实际的哈希运算。
  • 也就是说,22位编码盐值的最后一个字符,仅前2比特会被计入有效盐值,后4位的修改完全不影响实际使用的盐值。

示例验证

你构造的两个盐值my_salt_1和my_salt_2,前21个字符完全一致,仅第22个字符不同,只要这两个第22位字符的前2比特取值相同,解码得到的16字节有效盐就是完全一样的,最终生成的哈希结果自然相等。你构造的其他同类型盐值也都是符合这个规律的。

补充说明

如果需要得到完全不同的哈希结果,修改22位编码盐值的前21位中的任意一位即可,不要仅修改最后一位。这个设计不会影响bcrypt的安全性,有效盐的熵仍然有128比特,足够抵御彩虹表等攻击。

内容的提问来源于stack exchange,提问作者user11538509

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 21:54:03