ToolAct工具行动

文件 MD5 校验工具

计算文件的 MD5 哈希值,验证文件完整性

上传文件

拖拽文件到此处

支持任意文件类型和大小

校验比对

什么是文件 MD5?

MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希算法,可将任意文件内容映射为 128 位(32 个十六进制字符)的固定长度摘要。文件内容任何微小的变化都会导致完全不同的 MD5 值。文件 MD5 校验工具常用于验证文件完整性,确保文件在传输或下载过程中未被篡改或损坏。 安全相关结果不能孤立判断,还要结合密钥、使用场景、算法选择和可信来源一起评估。

使用方法

使用步骤

  1. 点击上传区域或将文件拖到页面上
  2. 点击「计算 MD5」按钮
  3. 等待计算完成,查看 MD5 值
  4. 可在验证区域输入已知 MD5 值进行比对

验证限制

  • MD5 适合用于快速文件识别,但其抗碰撞能力不足,不适用于安全敏感的验证场景。
  • 下载或发布版本时,请从可信来源比对哈希值,并优先使用 SHA-256。

使用场景

为文件生成旧版 MD5 校验和选择文件并计算其 128 位 MD5 值,过程中显示进度,完成后复制小写十六进制摘要,用于仍要求此旧版校验和的系统。文件被读取为 Blob 并在浏览器内完成哈希计算,不会上传,因此可以安全处理私密文档或供应商样本而不发送任何内容。
将文件与预期 MD5 值进行比对粘贴已知的 MD5 值,验证生成的 32 字符摘要是否匹配。这涵盖了传输校验、供应商要求、重复检测和仍发布 MD5 值的旧版发布归档。当校验和涉及信任或安全时,请使用更强的算法——MD5 已知的碰撞攻击使其不适合作为防篡改手段。
避免将 MD5 用作安全保障本工具适合兼容性工作和快速完整性检查,但自 2004 年王小云教授的碰撞攻击以来 MD5 已不再安全,2012 年的 Flame 恶意软件更是展示了针对微软代码签名的真实 MD5 碰撞伪造。对于安全敏感的验证场景,请使用文件哈希工具中的 SHA-256 或更强算法。纯本地设计确保文件内容留在你的设备上,只有摘要在页面和比对字段之间传递。
与镜像下载站的 MD5 值比对开源镜像站和较旧的固件页面仍在为每个版本发布 MD5 值。为下载的文件生成 32 字符摘要,在刷机或安装之前确认与列出的字符串一致。大小写十六进制是常见的静默不匹配原因,因此比对基于规范化格式进行。
涉及信任的场景请升级到 SHA-256MD5 用于发现意外损坏是可以的(翻转一个比特仍会产生完全不同的 128 位摘要),但同样的摘要可以被攻击者伪造。只要校验和来自第三方且文件用于生产环境,请切换到 SHA-256 或 SHA-512 选项——SHA-256 具备抗碰撞性,是签名发布的标准选择。

技术原理

MD5 是 RFC 1321(Ron Rivest,1992)定义的消息摘要算法 5,输出 128 位 / 16 字节摘要,以 32 个十六进制字符显示。算法采用 Merkle-Damgård 结构:输入先做填充,使比特长度对 512 取模为 448(先添加一个 1 比特再补 0),随后以小端 64 位整数附加原始长度,再切成 512 位的分组。每个分组更新一个 128 位的内部状态(A、B、C、D),初始值为 A = 0x67452301、B = 0xEFCDAB89、C = 0x98BADCFE、D = 0x10325476;按 4 组 ×16 共 64 轮迭代,每轮使用按位函数 F(x,y,z) = (x AND y) OR ((NOT x) AND z)、G(x,y,z) = (x AND z) OR (y AND (NOT z))、H(x,y,z) = x XOR y XOR z、I(x,y,z) = y XOR (x OR (NOT z)),配合常量 T[i] = floor(2^32 * |sin(i+1)|) 与左循环移位。最终状态以小端拼接即为摘要。空输入的 MD5 为 d41d8cd98f00b204e9800998ecf8427e,常用作管线自检。 浏览器不通过 crypto.subtle 提供 MD5(W3C Web Crypto 规范因碰撞攻击有意省略 MD5),所以本工具使用纯 JavaScript 实现的 MD5 在浏览器内完成计算。文件以 ArrayBuffer 形式读入内存,一次性算出 16 字节摘要并渲染为 32 个小写十六进制字符。计算运行在主线程,因此对多 GB 大文件做哈希会持续占用主线程直到结束;非常大的文件建议改用从磁盘流式读取的桌面工具。 MD5 在抗碰撞性上已被打破。王小云、于红波在 2004 年(CRYPTO 2005 发表)公布了首个可实用的碰撞攻击,将碰撞代价降到约 2^39 次运算。2008 年 Sotirov 等人利用选择前缀碰撞伪造了一张恶意中间 CA 证书;2012 年 Flame 国家级恶意软件使用此前未公开的选择前缀 MD5 碰撞,伪造了 Microsoft Terminal Server Licensing 代码签名证书。NIST 在 2011 年的 SP 800-131A 中禁止把 MD5 用于数字签名;CMU CERT 漏洞通告 VU#836068 称 MD5「不适合再使用」。MD5 仍可用于偶发损坏检测(哪怕翻转一位也会通过雪崩效应改变约 64 比特输出)和受信输入下的重复文件检测,但不要用于攻击者可控制或预测输入的场景。

  • MD5 产生 128 位 / 16 字节的摘要,编码为 32 个小写十六进制字符;在 RFC 1321(Rivest,1992)中定义。
  • 初始状态常量 A = 0x67452301、B = 0xEFCDAB89、C = 0x98BADCFE、D = 0x10325476;64 轮分四组各 16 轮,使用 F/G/H/I 位函数和轮常量 T[i] = floor(2^32 * |sin(i+1)|)。
  • 空输入的 MD5 为 d41d8cd98f00b204e9800998ecf8427e——快速检查哈希管道是否返回有效摘要的简便方法。
  • 浏览器不通过 crypto.subtle 提供 MD5(W3C Web Crypto 有意省略),本工具使用纯 JavaScript 实现的 MD5:把文件读为 ArrayBuffer,一次性计算 16 字节摘要,并渲染为 32 个小写十六进制字符。
  • 内存占用:整个文件会一次性读入一个 ArrayBuffer 后再哈希,因此多 GB 文件需要相应大小的标签页内存;超过浏览器标签可承载的文件请改用从磁盘流式读取的桌面工具(md5sum、certutil -hashfile、Get-FileHash)。
  • 碰撞攻击:王小云和于红波(2004)约 2^39 次运算;Sotirov 等(2008)选择前缀碰撞用于伪造恶意 CA 证书;Flame 恶意软件(2012)使用选择前缀碰撞伪造微软代码签名证书。
  • NIST SP 800-131A 于 2011 年禁止将 MD5 用于数字签名;MD5 仅适用于非对抗性完整性检查和重复检测——当校验和涉及信任时请切换到 SHA-256 或更强算法。

示例

空文件 MD5(公认常量)

文件: empty.txt(0 字节)

MD5: d41d8cd98f00b204e9800998ecf8427e

这是空输入的 MD5 -> 用来快速验证哈希流程是否正常工作。

(来自 RFC 1321 中针对空字符串的标准向量。)

校验下载的安装包

文件:setup.bin(3 字节,内容:abc)
计算 MD5:900150983cd24fb0d6963f7d28e17f72
厂商 MD5:900150983cd24fb0d6963f7d28e17f72

一致 -> 文件复制或下载正确。
不一致 -> 重新下载,传输过程中字节已损坏。

(该 MD5 值来自 RFC 1321 中针对 3 字节输入 'abc' 的
标准向量。实际使用时换成真实安装包即可,算法输出
是确定性的。)

对比两个版本的文档

report-v1.txt  (0 字节)  -> MD5:d41d8cd98f00b204e9800998ecf8427e
report-v2.txt  (3 字节,内容:abc)
                              -> MD5:900150983cd24fb0d6963f7d28e17f72

哈希不同即内容不同。哪怕只改一个字符,MD5 也会完全不同,
这正是完整性校验的工作原理。

(两个值均为 RFC 1321 MD5 标准向量。)

hello 字符串对比文件

MD5("hello")    = 5d41402abc4b2a76b9719d911017c592
MD5("hello\n")  = b1946ac92492d2347c6235b4d2611184

末尾换行会改变摘要:内容为 hello 但末尾不带 \n 的 hello.txt
对应第一行结果,末尾带 \n 的对应第二行。
这是与不同操作系统生成的 MD5 对比时常见的坑。

常见问题

文件会上传到服务器吗?

不会。MD5 通过 File API 在浏览器中本地计算。文件字节会分块读入内存并完成哈希,全程不会离开你的设备。可以在计算时打开“网络”面板进行确认。

MD5 现在还安全吗?

在安全场景下不安全。MD5 自 2004 年起就已被攻破——碰撞可以快速构造,因此不能用于数字签名、密码存储或防篡改校验。它仍可作为快速校验和,用于检测下载错误、磁盘错误等意外损坏。

为什么有时看到的 MD5 是小写,有时是大写?

MD5 输出 128 位 = 16 字节 = 32 个十六进制字符。这些字符显示为大写还是小写,纯属表现层选择;底层字节完全相同,验证时应不区分大小写。

这里能哈希多大的文件?

现代桌面浏览器在内存耗尽前一般可处理数 GB。移动端浏览器更紧张,几百 MB 是常见上限。超大文件请用系统命令(Linux 下 md5sum、Windows 下 certutil -hashfile、macOS 下 md5),它们直接从磁盘流式读取。

为什么我算的 MD5 和别的工具不一样?

几乎都是输入差了一个字节:换行符不同(CRLF 与 LF)、UTF-8 BOM、末尾空白,或文件版本不一样。MD5 算法本身是确定性的,输入完全相同时,所有合规实现都会得到相同结果。

对文本算 MD5 和对文件算 MD5 有什么区别?

MD5 处理的是字节,不是字符。“对文本算 MD5”是先将字符串编码(通常是 UTF-8),再对得到的字节求哈希;“对文件算 MD5”则直接读取文件字节。同一字符串以 UTF-8 与 UTF-16 保存,得到的 MD5 不同。

可以用 MD5 检测重复文件吗?

可以,但要注意 MD5 已知存在碰撞,恶意构造者能造出两份不同却 MD5 相同的文件。对于排查照片、下载等意外重复,MD5 已经足够快也足够可靠。需要可信去重时请改用 SHA-256。