第 4 课

常见 Hash 错误

避免应用与调试中典型的 Hash 误用。

Hash 相关问题,往往来自“想法对了,但字节或算法错了”。

用裸 MD5 或 SHA-256 存密码

没有 salt 和密钥拉伸的快速 Hash,容易被彩虹表和离线猜测攻破。密码存储应使用专门的密码 Hash 函数,并为每个用户使用唯一 salt。

Hash 了错误的表示形式

以下并不等价:

  • UTF-8 文本 Hello
  • 去掉首尾空白后的 ASCII 字节
  • 键顺序不同的 JSON 字符串
  • 带或不带末尾换行符的文件

务必 Hash 系统实际使用的那段字节序列。

把 Hash 当成秘密

如果攻击者知道输入空间很小——常见密码、递增 ID、短配置键——就可以离线暴力破解 Hash。Hash 适合完整性对比,不能保护可预测输入的机密性。

用错算法或格式做对比

同一输入的 MD5 与 SHA-256 结果必然不同,因为算法不同。十六进制大小写通常可互换,但 Base64 与 hex 不能不经转换直接对比。

用弱 Hash 做安全决策

MD5 checksum 适合发现意外文件损坏,不适合代码签名、证书校验,或对抗主动篡改者的完整性证明。

想动手练习时,可使用 DevCove 相关工具——可选,不属于本课正文。

打开相关工具

返回课程概览