为什么还要手动校验
下载安装包、系统镜像时,官网通常会贴出 SHA-256 值。比对它能确认两件事:文件在传输中没损坏,也没被人替换,比如塞进恶意代码。
三步搞定
- 在官方页面找到公布的 SHA-256 值。注意别拿 MD5 或 SHA-1 的值来比;
- 用工具算出你手里这份文件的 SHA-256;
- 逐字符比对,完全一致才算通过。
三个最容易栽的坑
- 算法对不上:官网同时给了 MD5 和 SHA-256,你比错了那一个;
- 来源本身不可信:下载页被劫持时,页面上贴的值也是假的。尽量走 HTTPS 官方源;
- “差不多就行”:哈希必须逐字符完全一致,差一个字符就是两个不同文件。
在浏览器里本地算
用 Web Crypto 在本地算哈希,文件不会上传,又快又不把内容暴露给第三方。文件越大耗时越久,等一会儿就好。
各系统命令行
| 系统 | 命令 |
|---|---|
| Windows(PowerShell) | Get-FileHash .setup.exe -Algorithm SHA256 |
| Windows(CMD) | certutil -hashfile setup.exe SHA256 |
| macOS | shasum -a 256 setup.dmg |
| Linux | sha256sum image.iso |
哈希和签名不是一回事
哈希只能证明“文件没变”,证明不了“文件来自官方”。校验值本身就写在官网上,官网被改,校验值也跟着改。数字签名(GPG、代码签名证书)用私钥签、公钥验,能同时证明完整性和来源。系统镜像、软件包这类高风险下载,优先核对签名。
校验失败但文件能用,先查这几项
- 确认官方值对应的是哪个文件:同名文件常有多个版本或架构(x64 / arm64);
- 确认下载完整,没被浏览器或代理截断(对比文件大小);
- 确认比对时没多带空格、换行或大小写差异;
- 以上都排除还不一致,就别装了,换官方源重新下。
批量校验
要核对多个文件,把“期望哈希 + 路径”列成清单,用脚本逐条算、逐条比,输出通过/失败,比人工比对稳得多:
# values.txt 每行:期望哈希 + 文件路径
while read -r expect file; do
actual=$(sha256sum "$file" | awk '{print $1}')
[ "$expect" = "$actual" ] && echo "OK $file" || echo "FAIL $file"
done < values.txt
持续交付里更省事的做法,是构建产物一生成就输出哈希清单,部署前自动比对,把校验提前到发布环节。