← 返回文章列表

如何校验下载文件的完整性(SHA-256 实操)

哈希避坑

为什么还要手动校验

下载安装包、系统镜像时,官网通常会贴出 SHA-256 值。比对它能确认两件事:文件在传输中没损坏,也没被人替换,比如塞进恶意代码。

三步搞定

  1. 在官方页面找到公布的 SHA-256 值。注意别拿 MD5 或 SHA-1 的值来比;
  2. 用工具算出你手里这份文件的 SHA-256;
  3. 逐字符比对,完全一致才算通过。

三个最容易栽的坑

  • 算法对不上:官网同时给了 MD5 和 SHA-256,你比错了那一个;
  • 来源本身不可信:下载页被劫持时,页面上贴的值也是假的。尽量走 HTTPS 官方源;
  • “差不多就行”:哈希必须逐字符完全一致,差一个字符就是两个不同文件。

在浏览器里本地算

用 Web Crypto 在本地算哈希,文件不会上传,又快又不把内容暴露给第三方。文件越大耗时越久,等一会儿就好。

各系统命令行

系统命令
Windows(PowerShell)Get-FileHash .setup.exe -Algorithm SHA256
Windows(CMD)certutil -hashfile setup.exe SHA256
macOSshasum -a 256 setup.dmg
Linuxsha256sum 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

持续交付里更省事的做法,是构建产物一生成就输出哈希清单,部署前自动比对,把校验提前到发布环节。

动手试试:文件哈希校验(拖入文件自动计算)、哈希计算(文本哈希)