文件一致性校验是什么
一致性校验回答的是「传过去的东西和源头是不是一模一样」。通用做法是对内容计算摘要(MD5、SHA-1、SHA-256)后比对,或者生成清单文件(每行是摘要加路径)批量核对。这里必须区分两件事:完整性校验防的是传输损坏与写入截断,防篡改要的是抗碰撞,MD5 与 SHA-1 已知可人为构造碰撞,只能用于前者。文件大小与修改时间足以做快速预筛,但不适合作为最终判定依据。
基本信息
| 常用算法 | MD5(128 位)、SHA-1(160 位)、SHA-256(256 位)、BLAKE3(速度取向) |
|---|---|
| 用途区分 | 完整性(防损坏)与真实性(防篡改)是两个不同的目标 |
| 常用工具 | sha256sum、md5sum、openssl dgst,Windows 可用 certutil |
| 关键要求 | 摘要清单本身必须来自独立可信渠道 |
典型使用场景
- 分发安装包或二进制后确认文件完整
- 备份恢复之后确认数据可用未损坏
- 大批文件迁移后逐项核对
- 校验归档包解压结果与原始目录一致
- 排查同一份文件在不同主机上是否一致
摘要生成与核对
摘要生成与核对
sha256sum app.tar.gz > app.tar.gz.sha256 # 生成摘要清单
sha256sum -c app.tar.gz.sha256 # 按清单核对,输出 OK 或 FAILED
find /data -type f -print0 | xargs -0 sha256sum | sort > manifest.txt # 批量生成并排序便于比对
sort manifest.txt | uniq -c | awk '$1>1' # 找出内容重复的文件(可选用法)
certutil -hashfile C:\pkg\app.zip SHA256 # Windows 自带工具核对算法与适用性
| 算法 | 摘要长度 | 适用场景 |
|---|---|---|
| MD5 | 128 位 | 快速完整性检查,不用于防篡改 |
| SHA-1 | 160 位 | 兼容老系统,同样不用于防篡改 |
| SHA-256 | 256 位 | 通用推荐,软件分发与安全场景 |
| BLAKE3 | 256 位 | 速度优先的大规模校验 |
| 大小与时间 | 无摘要 | 仅作快速预筛,不能作为最终判定 |
大规模校验会占满磁盘 IO。可以在业务低峰执行,或先按大小与时间预筛出疑似变化的文件再计算摘要,把开销集中到真正需要核对的对象上。
摘要比对只能证明内容一致,不能证明来源可信。如果攻击者同时替换文件与清单,校验依然会通过,因此清单必须来自独立可信渠道(签名、制品仓库元数据或带外传递)。