原理:哈希(摘要)算法对原始文件内容运算,生成固定长度哈希值;文件只要有 1 字节改动,哈希结果就会完全不同。下载文件后,本地算出哈希,和官方提供的哈希对比,一致说明文件未篡改、传输无损坏。
常用算法:MD5(不安全,仅校验完整性,不要用于签名)、SHA‑1、SHA‑256、SHA‑512,优先 SHA256。
Windows
方法 1:PowerShell(系统自带,无需装软件)
powershell
# 计算单个文件SHA256
Get‑FileHash "D:\download\xxx.iso" -Algorithm SHA256
输出示例:
plaintext
Algorithm Hash Path
--------- ---- ----
SHA256 A1B2C3...... D:\download\xxx.iso
把输出的Hash字符串,和网站给出的摘要比对,完全一致 = 文件完整。
支持算法:SHA256,SHA512,SHA1,MD5
计算 MD5 示例:
Get‑FileHash test.zip -Algorithm MD5
方法 2:certutil(CMD)
cmd
certutil -hashfile D:\download\xxx.iso SHA256
Linux / macOS
方式 1:sha256sum 命令
bash
# 计算文件sha256
sha256sum xxx.iso
输出:a1b2c3... xxx.iso
如果网站提供.sha256校验文件,直接自动校验:
bash
sha256sum -c xxx.iso.sha256
输出OK代表校验通过。
其他算法:md5sum、sha1sum、sha512sum
实操完整流程
从官方下载文件,同时复制官方公布的SHA256 摘要字符串;
在本地对下载好的文件计算哈希;
逐字符对比哈希字符串(大小写不敏感);
✅完全相同:文件下载完整,没有损坏篡改;
❌不相同:下载出错、文件被修改,不要使用。
⚠️注意:MD5、SHA1 已经被攻破,可以人为制造碰撞;只做简单完整性校验可以,安全场景务必使用 SHA‑256/SHA‑512。哈希只能校验内容完整性,不能确认来源可信;要确认来源可信需要数字签名 (GPG)。
Python 代码示例(手动计算文件哈希)
适合大文件,分块读取,不会一次性把整个文件读进内存
python
运行
import hashlib
def get_file_sha256(file_path, chunk_size=4096*1024):
sha256 = hashlib.sha256()
with open(file_path, "rb") as f:
while chunk := f.read(chunk_size):
sha256.update(chunk)
return sha256.hexdigest()
if __name__ == "__main__":
digest = get_file_sha256(r"D:\download\test.iso")
print(digest)
# 和官方哈希比对 digest == 官方哈希串
常见坑
不要校验文件名,只看二进制内容,改文件名不会改变哈希;
换行、BOM、额外空格会改变哈希,复制官方哈希时不要带多余换行空格;
大小写:哈希字符串大写小写等价,比对时可以统一转小写。
原文链接
欢迎访问 小易撩挨踢