要点:哈希是根据你的文本计算出的定长指纹。相同输入总是得到相同哈希,但只要改动一个字符,就会得到完全不同的哈希——这正是哈希可用于判断文本或文件是否发生变化的原因。本文说明什么是哈希、该选哪种算法(MD5、SHA-1、SHA-256、SHA-512)、如何在实践中校验完整性,以及绝不能忽视的安全边界。
哈希会把任意长度的文本——一个词、一段话或整篇文档——转换成一串简短的十六进制字符。由于计算是确定性的,你可以运行两次再对比:哈希相同表示输入逐字节完全一致;哈希不同则说明有变化,哪怕两个版本在屏幕上看起来一样。

哈希到底是什么?
密码学哈希函数有三条对日常工作很关键的性质。它是确定性的:相同输入总给出相同输出。它是定长的:无论三个词还是三兆字节,摘要长度相同。它具有雪崩效应:改动一个字符——哪怕是末尾一个空格——都会翻转约一半的输出位,使新哈希看起来与旧的毫无关联。
正是最后这一性质,使哈希成为可靠的“变更探测器”:你无法凭肉眼确认两大段文字是否完全一致,但对比两个 64 个字符的哈希值只需一秒。
该用哪种算法?
常见算法主要在摘要长度以及是否仍被视为安全上有所不同:
- MD5——128 位摘要,32 个十六进制字符。速度快,但在密码学上已被攻破(存在可行的碰撞)。适合去重等非安全用途,绝不用于安全场景。
- SHA-1——160 位,40 个字符。同样已被碰撞攻击攻破,正在各处被淘汰。
- SHA-256——256 位,64 个字符。属于 SHA-2 家族,是当下完整性校验的合理默认选择。
- SHA-512——512 位,128 个字符。安全余量更大;需要额外余地时很有用。
拿不准时就选 SHA-256:支持广泛,处理文本很快,且足够稳健,蓄意制造碰撞并非现实威胁。
实践中如何校验文本完整性
流程很简单。把原始文本粘贴到哈希生成器,记下 SHA-256 摘要。之后——当文本经过邮件、粘贴进 CMS 或在各应用间复制后——再算一次并对比。两个摘要一致,说明毫无改动;若不同,则有看不见的修改混了进来:被替换的智能引号、被删除的换行,或末尾的一个空格。
它比肉眼审阅更可靠,恰恰因为破坏排版的往往正是看不见的东西。
哈希做不到什么
哈希不是加密。哈希是单向的:你无法从 SHA-256 摘要还原出原始文本。这也意味着哈希不会隐藏或保护内容,它只能检测变化。另有两条边界需要说清:
- 对密码取原始哈希并不是安全存储。密码需要慢速且加盐的函数(bcrypt、scrypt、Argon2),而非单纯的 MD5 或 SHA-256。
- 编码很重要。同一段可见文本,按 UTF-8 与按 UTF-16 取哈希,或带与不带末尾换行,都会得到不同摘要。要拿同类与同类对比。
校验下载的文件
现实中最常见的用途是确认下载文件完好无损。厂商公布安装包的 SHA-256;你计算所收到文件的校验和并对比。若一致,字节与厂商分发的完全相同;若不一致,几乎总是下载损坏或不完整——极少数情况下是被篡改。对本地文件,请用文件校验和验证器,它在浏览器中读取文件,绝不上传。
需要避免的常见错误
- 把 MD5 或 SHA-1 用于任何安全相关场景——请改用 SHA-256。
- 把哈希当成加密,或指望“解码”哈希。
- 对比由不同编码或带多余空格生成的哈希。
- 存储密码的原始哈希,而非使用专用函数。
用得对,哈希是最省事的完整性校验之一:粘贴、对比,你就能确切知道两个版本是否一致——无需猜测,且没有任何内容离开你的浏览器。