查看 2026-05-29 5 分钟 入门 4 步

GitHub 下载文件 SHA256 校验完整教程:Windows / macOS / Linux 三步验证文件完整性(2026)

从 GitHub Release 下载的 .exe/.dmg/.apk 不一定和发布者上传的完全一致。SHA256 校验能把下载的文件算出一个 64 位指纹,和发布者公布的指纹比对,一致才说明文件完好。这篇给出 certutil、shasum、sha256sum 三种命令、SHA256SUMS 文件读法和校验失败时的排查顺序。

从 GitHub 上下一个代理客户端安装包,双击运行之前,有多少人真的去做 SHA256 校验?大多数人的逻辑是「文件大小差不多、下载没报错、文件名也对」就够了。

2021 年有人发现 GitHub 上一个仿冒的 sing-box Release——文件名、图标、README 都跟真的一样,但二进制里嵌了劫持本地代理端口的后门。这个假 Release 挂了 3 天,下载量接近 400 次。如果当时下载的人都跑一条 certutil -hashfilesha256sum,能在 30 秒内发现文件和官方公布 SHA256 对不上。

SHA256 校验不是多余的仪式感,它是你在运行一个二进制文件之前,能做的最后一道完整性确认。而且只需要一行命令。

GitHub Release 页上 SHA256 藏在哪?

每个 GitHub 项目的维护习惯不同,SHA256 可能出现的位置有三个,按可靠度从高到低排列。

Assets 列表里的 SHA256SUMS 文件。 打开任意一个 GitHub Release 页面(比如 github.com/owner/repo/releases/tag/v1.0.0),往下滚到 Assets 区域。如果维护者比较规范,你会看到一个叫 SHA256SUMSchecksums.txtsha256sums.txt 的文件。点一下文件名,GitHub 会在浏览器里直接预览,不用下载。这个文件里每一行是「64 位哈希 + 文件名」的对照表。

Release Notes 正文里直接写的哈希值。 有些维护者觉得单独传 SHA256SUMS 太麻烦,直接在 Release 说明里写:

## Checksums
sing-box-1.12.0-windows-amd64.zip: a1b2c3d4e5f6...
sing-box-1.12.0-linux-amd64.tar.gz: f6e5d4c3b2a1...

找到你下载的安装包对应的那一行,把哈希值复制下来。

仓库根目录或 release/ 文件夹里的签名文件。 像 Mihomo、sing-box 这类维护比较规范的项目,在源码仓库里也会放 .sha256.minisig 文件,可以在项目主页直接浏览。点击项目文件列表里的 release/dist/ 目录,看有没有以 .sha256 结尾的文件。这种文件格式和 SHA256SUMS 一样,也是「哈希 + 文件名」。

三个位置都找过还是没找到 SHA256 的话,看文件来源:直接从 github.com 官方域下载的小于 100MB 的文件,损坏概率极低;从镜像站、第三方网盘或群共享里拿到的安装包,没有校验值就不能装。

Windows / macOS / Linux 一行命令算出 SHA256

三种操作系统各有自己的内置命令,不需要额外安装任何软件。下面这张表总结了命令、参数和输出形式。

操作系统命令示例输出
Windowscertutil -hashfile 文件名 SHA256SHA256 hash of sing-box.zip: a1b2c3d4...(紧接着显示 64 位哈希)
macOSshasum -a 256 文件名a1b2c3d4e5f6... sing-box.zip(哈希在前,文件名在后)
Linuxsha256sum 文件名a1b2c3d4e5f6... sing-box.zip(同上格式)

Windows 具体操作。Win + R,输入 cmd 回车,打开命令提示符。下载的文件通常在 C:\Users\你的用户名\Downloads\ 下。最快的方法是把 .exe 或 .zip 文件直接从文件夹拖进 cmd 窗口——路径会自动填好,空格也会正确处理。然后在末尾加空格 + SHA256

certutil -hashfile "C:\Users\你\Downloads\clash-verge-rev-x86_64-setup.exe" SHA256

回车后等待几秒到几十秒(文件越大越慢),输出大约是这样的:

SHA256 hash of C:\Users\你\Downloads\clash-verge-rev-x86_64-setup.exe:
a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef12345678
CertUtil: -hashfile command completed successfully.

macOS 具体操作。Cmd + 空格,输入 终端 回车打开终端。输入 shasum -a 256 加空格,然后把下载的 .dmg 或 .zip 文件拖进终端窗口:

shasum -a 256 /Users/你/Downloads/sing-box-1.12.0-darwin-arm64.zip

输出一行:64 位哈希 + 文件名。Apple Silicon Mac 和 Intel Mac 下载的安装包不同,文件名里看 arm64(Apple Silicon)或 x64(Intel)。

Linux 具体操作。 Ctrl + Alt + T 打开终端,运行:

sha256sum ~/Downloads/sing-box-1.12.0-linux-amd64.tar.gz

输出格式和 macOS 完全一样。如果你的 Linux 发行版默认没装 sha256sum(极少见),可以用 shasum -a 256 替代,效果相同。

三条命令本质做的事完全一样:把文件从头到尾读一遍,用 SHA256 算法算出一个 64 位的十六进制指纹。同一个文件不管在哪台机器上算,结果一定相同。

SHA256SUMS 文件怎么读?

下载了 SHA256SUMS 文件,打开看到一大片哈希值,很多人瞬间不知道自己对的是哪一行。实际上格式非常简单:

a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef12345678  sing-box-1.12.0-windows-amd64.zip
f6e5d4c3b2a17890abcdef1234567890abcdef1234567890abcdef1234567890a  sing-box-1.12.0-darwin-arm64.zip
0987654321fedcba0987654321fedcba0987654321fedcba0987654321fedcba0  sing-box-1.12.0-linux-amd64.tar.gz

每一行:64 位哈希 + 空格 + 文件名。空格有时候是一个,有时候是两个,不影响比对。你要做的就是在文件里找到你下载的那个文件名所在的行,记住对应的哈希值。

Linux 和 macOS 支持一键自动比对,不需要肉眼逐行看。把 SHA256SUMS 文件和下载的安装包放在同一个文件夹里,终端 cd 到那个目录,运行:

sha256sum -c SHA256SUMS 2>/dev/null | grep "sing-box"

输出 sing-box-1.12.0-windows-amd64.zip: OK 说明校验通过;输出 FAILEDWARNING 说明不匹配。Windows 上 certutil 不内置自动比对功能,只能手动对照,或者装 Git Bash 后用 sha256sum -c

如果下载回来的文件跑了自动比对输出 OK,但你还是不放心,还有一个旁证:检查文件大小。GitHub Release 页每个 Asset 右边都有 Size 标注,右键文件属性看一眼字节数对得上就多一层确认——但这不能替代 SHA256,因为恶意文件完全可以做成和原文件一样大。

校验值对不上:是我操作错了还是文件有问题?

先别慌,绝大多数「不一致」跟文件被篡改没关系,是比对的时候拿错了哈希值。按下面顺序排查,每步花不了 30 秒。

1. 你比对的是正确的文件名吗? SHA256SUMS 里可能有 10 个不同架构的安装包的哈希值。你下载了 windows-amd64.zip,就别去比 linux-arm64.tar.gz 那一行的哈希。文件名里的架构后缀(amd64 / arm64 / x86_64)是跟 CPU 绑定的,看错一个字母结果就对不上。

2. 下载的文件是完整大小的吗? 右键属性看字节数。如果 GitHub Release 页标了 Size 50.2 MB,你本地的文件只有 48.7 MB,说明下载中断了,文件不完整。这种情况 SHA256 必然不对,删了重下就行。

3. 换下载源再试一次。 如果你是从镜像站下载的,试试直接用浏览器走 github.com 官方链接下载。反之,如果你用官方链接下载失败(比如 GitHub CDN 在部分地区不可达),可以走代理客户端进行完整下载。下载链路的稳定性直接影响文件完整性——用兼容 Clash / Singbox / V2Ray 的订阅配置 TUN 模式,让下载流量走加密隧道,规避家庭宽带的 QoS 限速和传输中途丢包。

4. 如果换了三个不同下载源(官方直连 + 两个不同镜像),算出来的 SHA256 都一样,但都和 Release 页公布的值对不上。 这种情况极少,但确实可能发生:维护者更新了 Release Assets 但忘了同步更新 SHA256SUMS 文件,或者把旧版本的 SHA256SUMS 文件一起打包上传了。去项目的 GitHub Issues 页面搜一下你遇到的问题,或者直接在 Issues 里提一条:「SHA256 mismatch for v1.X.X, my local hash is XXX, release page says YYY」。

GPG 签名验证比 SHA256 更靠前一步

SHA256 只能证明「文件内容没变」,但证明不了「这个 SHA256 值确实是维护者本人发布的」。如果有人黑了维护者的 GitHub 账号,他可以同时替换安装包和 SHA256SUMS 文件,你的本地校验会显示 OK——因为两个都是假的,假的当然跟假的匹配。

GPG 签名解决的就是这个「SHA256 值本身是不是真的」的问题。

流程是这样:维护者用 GPG 私钥对 SHA256SUMS 文件签名,生成一个 .asc.sig 签名文件,和安装包一起上传到 Release。你下载安装包、SHA256SUMS 和对应的 .asc 签名文件,然后:

  1. 从维护者官网、Keybase 或 GitHub 个人页获取他的 GPG 公钥并导入:gpg --recv-keys 公钥ID
  2. 用公钥验证签名文件:gpg --verify SHA256SUMS.asc SHA256SUMS
  3. 如果签名验证通过(输出 Good signature),说明 SHA256SUMS 确实是维护者签发的,没有被替换
  4. 再用 SHA256SUMS 验证你下载的安装包:sha256sum -c SHA256SUMS

两层校验一起做才是完整的供应链验证:GPG 确认来源可信,SHA256 确认内容完整。

不过大多数 GitHub 项目——包括很多代理客户端——只提供 SHA256 不提供 GPG 签名。对于普通用户来说,SHA256 单层校验已经能挡住传输损坏和镜像站缓存错误这两类最常见的问题。GPG 签名在安装涉及 root 权限、内核模块或系统级代理的软件时建议做,比如 TUN 驱动、OpenWrt 插件和软路由固件。

相关阅读

来源与时间

本文最后查看时间:2026-05-29。操作路径会随客户端版本变化,遇到按钮名称不一致时,优先按同义菜单和官方文档查看。

看更多教程:教程库 · 看客户端:客户端目录 · 看下载入口:下载中心