高效工具集

MD5 和 SHA-256 怎么选:文件校验入门

更新于 2026-09-15

下载系统镜像、开发工具包时,页面角落常躺着一串乱码,旁边标着 MD5 或 SHA-256。它不是版本号,是文件的指纹:把你下载到的文件重算一遍,对得上,说明你手里这份与发布方那份一个字节不差;对不上,说明传输路上出了问题,直接安装可能白忙一场。这篇文章讲两件事:指纹是怎么算出来的,MD5 与 SHA-256 两个名字各自该在什么时候认。

哈希是什么:文件的指纹

哈希算法把任意大小的内容压成一段固定长度的摘要:一句话算出来是 32 个字符,一个 4GB 的镜像算出来还是 32 个字符。支撑它做校验的是三条性质:

  • 确定性。同一份内容,在这台机器或那台机器、这个浏览器或那个浏览器里算,结果分毫不差——跨设备比对因此才成立;
  • 牵一发动全身。内容改一个标点、换一种换行符,摘要立刻面目全非,而且从摘要上完全看不出「差了多少」,只知道「不一样」;
  • 单向。摘要推不回原文,所以它只能用来对答案,既不是加密,也当不了存放原文的容器。

MD5 vs SHA-256

两个名字都出自哈希算法家族,差别可以压缩成两点:摘要长度与抗碰撞能力。

MD5 的摘要长 128 位,写成 32 个十六进制字符;SHA-256 长 256 位,64 个字符。摘要越长,可取的值越多,人为构造「内容不同、摘要相同」的难度就越高。而 MD5 连同更老的 SHA-1,这道防线已经被攻破——攻击者有成体系的构造手法,能让两份不同的内容拥有同一个 MD5。SHA-256 至今站得住。

MD5SHA-256
摘要长度128 位,32 个十六进制字符256 位,64 个十六进制字符
抗碰撞已被攻破,可刻意构造碰撞仍被视为安全
浏览器内速度软件实现,分块计算、带进度原生 WebCrypto 接口,更快
适用场景意外损坏校验、去重、内容指纹防篡改、签名等安全场景的起步线

选型口径一句话:判断「文件坏没坏、传没传对」,场景里没有对手,MD5 依然够用,主流软件源至今仍在公布 MD5 校验值;一旦存在「可能有人刻意调包」这层顾虑,就从 SHA-256 起步,别让 MD5 独自扛。

场景一:下载文件校验

最经典的用法,是拿着官网公布的校验值做核对。打开文件哈希校验页:

  1. 把文件拖进投放区,MD5、SHA-1、SHA-256 三种摘要同时开算,MD5 一路显示读取进度;
  2. 算完把官网给的校验值粘进「校验值比对」框,页面自动判断它与哪种算法匹配——匹配,文件完整;三种全不匹配,多半是下载或传输途中损坏,重新下载比折腾排查更省时间;
  3. 比对忽略大小写与空格:官网惯用全大写、或写成带空格的分组,都不影响匹配;页面上的「大写显示」开关只改展示与复制的格式,不动计算结果。

大文件也不用怵。MD5 在这一页按块分片流式读取,算一块丢一块,内存占用与文件总大小基本无关;SHA-1 / SHA-256 走浏览器原生 WebCrypto,接口要等算完才一次性交出结果,这正是页面上只有 MD5 带进度条的原因。文件超过约 512MB 时,耗时与内存开始吃设备性能,特别大的文件建议分段处理,或者干脆换命令行工具。这些计算全部在浏览器内完成,文件不会被上传。

场景二:传输后确认一致

「我发你的文件,你收到的是不是同一份」——经过网盘、聊天工具各转一手之后,这个问题值得验证。办法很朴素:两边各算一次摘要,对字符。

内容是文本,用MD5 计算页最顺手:把内容粘进输入框,摘要即时出现,不需要点任何按钮;两边各粘一次,比对那串 32 位小写十六进制即可。想先验证流程,点「示例」填入 hello world,应得到 5eb63bbbe01eeed093cb22bb8f5acdc3。顺带一提,部分老系统说的「16 位 MD5」,是取这 32 位结果的第 9–24 位,需要兼容时手动截取就行;对方给的是大写时,忽略大小写逐字符对照。

万一对不上,先按顺序查三件事,而不是急着怀疑工具:文本是否带了看不见的首尾空白——多一个换行、末尾多一个空格,摘要就完全变样,比对两台机器上的同名配置文件时,换行符差异就是常见元凶;两边算的是否真是同一个文件——内容改一个字节,摘要就是另一副面孔;两边选的算法是否同名同款。三点逐一排完还对不上,再去想别的。

场景三:去重与内容指纹

文件名会骗人,摘要不会。两份文件名字不同、来源不同,疑似同一个东西:各算一次指纹,一致就是同一份内容,比打开逐段翻看省事得多。批量场景更有价值——给一批素材或文档各算摘要、登记成清单,之后任何时候抽查,对一下指纹就知道内容有没有被误改。代码片段、配置内容是否与线上一致,同样粘进文本页算一算,比肉眼逐行扫快。

安全边界

MD5 的问题从来不是「会算错」,而是「能被刻意撞上」。凡是有对手的场景——验证文件是否被人动过、软件签名、口令存储——都不能只靠它。防篡改校验从 SHA-256 起步:本站文件哈希页一次算齐三种摘要,SHA 哈希页还能处理文本与其他长度的 SHA 摘要、HMAC 签名。存密码是另一个课题,请交给 Argon2、scrypt、bcrypt 这类专用慢哈希——它们的设计目标是让攻击者算得慢,与校验求快正好相反。

回到开头那串乱码:知道它是什么、该认哪个名字,下载后的半分钟核对就从走过场变成实打实的保障。

常见问题

MD5 还安全吗?
MD5 已有成熟碰撞手法,不能用于签名、口令存储等对抗性场景;但做「下载文件是否损坏、传没传对」这类非对抗校验依然够用,主流软件源也还在提供 MD5 校验值。
两个工具算出来的值不一样?
先确认输入一致:是否带了隐藏的首尾空白、是否是同一个文件(改一个字节结果完全不同)、算法是否选的同一个。三者对上,结果必然一致。
大文件(几个 GB)算得动吗?
分块流式计算让内存占用与文件总大小基本无关,MD5 还带读取进度;但超过约 512MB 后耗时与内存仍取决于设备性能,特别大的文件建议分段处理或改用命令行工具。

相关工具