← 所有文章

如何生成 MD5 或 SHA-256 哈希(并校验下载文件)

2026-06-12

一句话答案: 哈希是某段数据的单向指纹——丢进任意文本或文件,吐出一串定长字符串。相同的输入永远得到相同的哈希,但你没法倒推回原始输入。把文本粘进 哈希生成器,就能瞬间拿到 MD5、SHA-1 和 SHA-256,全在你的浏览器里完成。现实中最常见的用途是校验下载文件:拿发布方公布的哈希,和你实际下到的文件的哈希做对比。两者一致,说明文件没损坏、也没被篡改。

生成文本的哈希

  1. 打开 哈希生成器
  2. 把文本粘贴或键入到输入框。
  3. MD5、SHA-1、SHA-256 同时显示——不用反复点按钮。
  4. 复制你需要的那一个。

就这么简单。没有任何数据离开这个标签页——我用浏览器内置的 crypto.subtle API 来做哈希,所以你的输入永远不会发到服务器。打开 DevTools,盯着 Network 选项卡,随便输点字:零请求。如果你要哈希的是任何敏感内容,这一点很重要,因为把它粘进某个随便找来的在线哈希网站,就等于在赌那个网站不会记录它。

校验下载文件的 checksum

这是最经典的用途。当一个项目发布版本时(一个 Linux ISO、一个安装包、一个 CLI 二进制),他们通常会在旁边附上一个 SHA-256 checksum。你对下载下来的副本做哈希,然后比对。

  1. 记下项目网站上公布的 checksum(例如 9f2a...e1)。
  2. 对你下载的文件做哈希。对大文件来说,命令行比浏览器快:
    • macOS / Linux: shasum -a 256 yourfile.iso
    • PowerShell: Get-FileHash yourfile.iso
  3. 逐字符比对这两串字符串(或者干脆瞄一眼头几位和尾几位)。
  4. 一致 = 没问题。不一致 = 重新下载;文件已损坏或被掉包。

对于小段文本或粘贴进来的字符串,浏览器工具是最快的路径。对于几个 GB 的大文件,就用上面那条 CLI 单行命令。

实话实说的安全提示:MD5 和 SHA-1 已被攻破

这是大多数「哈希生成器」页面跳过的部分。MD5 和 SHA-1 在 密码学意义上已被攻破——研究者能构造出两段不同的输入,产生相同的哈希(即碰撞)。所以:

  • MD5/SHA-1 用于 非安全性的完整性检查 没问题:检测意外损坏、文件去重、缓存键。
  • 凡是攻击者可能尝试伪造一个匹配的场景——签名、密码存储相关场景、与安全相关的校验——请使用 SHA-256 或更强的算法。

还有两点人们常搞错:哈希 不是加密(没有密钥,你也没法解密它),而且它 不可逆。如果某个网站声称能「解密 MD5」,那它只是在一张存有此前见过的输入的表里查这个哈希而已。这也是为什么你永远不该在不加盐的情况下哈希一个原始密码——不过那是改天再聊的话题。

需要的是编码二进制数据,而不是给它做指纹?那是 Base64 的活儿——完全是另一回事。

常见问题

MD5 用着安全吗? 用来检查文件下载有没有损坏,安全。用在任何与安全相关的场景,不安全——请用 SHA-256。今天要生成 MD5 碰撞是轻而易举的事。

能逆向或解密一个 SHA-256 哈希吗? 不能。哈希在设计上就是单向的。所谓「解密」网站只是在一张预先算好的表里查常见输入;它们没法逆向出一个任意的哈希。

MD5 和 SHA-256 有什么区别? MD5 产生 128 位的哈希,在安全上已被攻破。SHA-256 产生 256 位的哈希,属于 SHA-2 家族,目前仍被认为是安全的。除非你确实为了兼容旧系统而需要 MD5,否则就用 SHA-256。

在 Windows 上怎么校验下载文件的 checksum? 在 PowerShell 里运行 Get-FileHash yourfile.exe(默认就是 SHA-256),把输出和发布方公布的值做对比。

— Milo 🐨