如何在浏览器中检查下载文件的 SHA-256 校验值
校验值是根据文件内容计算出的一段简短指纹。如果你对下载的文件计算哈希,结果与发布者列出的数值一致,那么文件与发布者计算哈希时的文件逐字节相同。哪怕只差一个比特,指纹也会完全不同。把文件拖入哈希生成器,粘贴发布者提供的数值,工具会显示哪种算法匹配。
哈希生成器下载的文件和官网一致吗?免费使用校验值能证明什么
校验值用来检测文件是否被改动。它能发现下载中途断开的文件、因网络不稳或硬盘故障而损坏的文件,以及镜像站提供的与原版不同的版本。这些错误很常见,哈希值一致就能排除它们。
但它不能证明发布者可靠。假如攻击者能修改下载页上的文件,同时也改掉旁边显示的哈希值,两者依然一致,校验就会通过。校验值的可信度取决于你获得哈希值的渠道。要让校验真正有意义,哈希值应当与文件分开,通过另一条渠道获取:例如带签名的发布公告、附有 GPG 签名的校验文件、包管理器的记录,或你亲自输入地址访问发布者的网站。如果哈希值和文件来自同一个链接,那么面对有预谋的攻击者,它几乎没有作用。
哈希一致也说明不了程序做了什么。它只能确认你拿到的文件就是发布者计算过哈希的那一个。文件是否安全,是关于发布者的问题,需要靠签名、来源的信誉以及项目自身的验证步骤(如果有的话)来判断。
发布者在哪里列出哈希值
先看下载按钮附近。许多项目会在下载页上直接印出 SHA-256 数值。规模较大的项目通常会发布一个文件,常名为 SHA256SUMS 或类似名称,每个下载文件占一行,有时旁边还有签名文件。一些软件平台会把哈希值放在自己的元数据里。README 和发布说明也是常见的位置。
也要看清算法名称。标注为 SHA-256 的数值应当是 SHA-256 哈希,即 64 位十六进制字符。32 位字符是 MD5,40 位字符是 SHA-1。工具需要知道你在比对哪一种,你自己也需要知道。
四步比对哈希值
- 从官方页面下载文件一次。
- 打开哈希生成器,选择文件,把文件拖进去。等待计算完成。超大文件可能需要一些时间,并且可能超出浏览器能承载的内存。
- 把发布的哈希值粘贴到预期哈希(可选)中。大小写和空格会被忽略,因此从网页复制来的大写数值也可以直接用。
- 查看是否匹配。工具会显示哪种算法匹配。如果都不匹配,不要运行这个文件,重新下载一次。如果第二次的结果仍然不符,说明发布的数值与你的文件对不上,应当向发布者确认哪一个是正确的。
如果你习惯用终端,同样的检查只需一条命令。在 Linux 上对文件运行 sha256sum;在 macOS 上,shasum -a 256 的效果相同;在 Windows PowerShell 中,使用文件路径执行 Get-FileHash -Algorithm SHA256 即可得到数值。输出与工具显示的十六进制字符串相同。
哈希不只用于比对发布的数值。损坏检查用的是同样的原理,判断文件是否受损;重复文件同样通过比较哈希来找出文件夹中完全相同的副本。
对文本计算哈希
文本模式计算的是你输入或粘贴的内容。它会先把文本转换为 UTF-8 字节。文本框保存换行时使用 LF,因此无论粘贴的内容来自哪个系统,都会以 LF 换行计算哈希。在 Windows 上保存的文件,每行通常以 CRLF 结尾,其字节不同,哈希也就不同。所以当发布者提供某个文件的哈希时,请使用文件模式,直接对文件本身计算。如果你需要精确看出两个版本在哪里不同,对比文本工具会并排显示所有改动。
为什么 MD5 和 SHA-1 不够安全
工具之所以提供 MD5 和 SHA-1,是因为许多旧的下载页仍在列出它们。用于发现文件损坏时,它们是够用的:无意的改动恰好得到相同的 MD5 或 SHA-1 值,几乎不可能发生。
但面对攻击者,它们就不够用了。碰撞是指两个不同的输入得到相同的哈希值。现在已经能廉价地制造 MD5 碰撞,因此任何需要安全性的场景都不应依赖 MD5。SHA-1 的碰撞已在 2017 年被公开演示,此后浏览器和证书颁发机构已停止用 SHA-1 做签名。如果发布者只提供 MD5 或 SHA-1,请要求其提供 SHA-256,或带签名的校验文件。凡是可能有人刻意篡改文件的场合,都应使用 SHA-256 或更强的算法。截至撰写本文时,尚无已知的实用攻击能够破解 SHA-256。算法指南介绍了如何选择。
快速解答
哈希一致是否就说明文件安全? 它只说明文件就是被计算过哈希的那个文件。是否安全,取决于哈希值是否来自你信任的来源。
两个不同的文件会有相同的 SHA-256 吗? 实际上不会。截至撰写本文时,尚未发现能找出这类文件对的实用方法。
复制之后为什么哈希不匹配? 先检查算法是否选对。然后查看是否缺少或多出了字符,或者复制不完整。大小写和空格会被忽略,所以它们不是原因。
由 AI 辅助翻译自英文原文。
评论
还没有评论。快来抢沙发。


