易君召
发布于 2026-08-05 / 作者:易君召 / 3 阅读
0

使用哈希算法验证文件完整性

原理:哈希(摘要)算法对原始文件内容运算,生成固定长度哈希值;文件只要有 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

实操完整流程

  1. 从官方下载文件,同时复制官方公布的SHA256 摘要字符串

  2. 在本地对下载好的文件计算哈希;

  3. 逐字符对比哈希字符串(大小写不敏感)

    ✅完全相同:文件下载完整,没有损坏篡改;

    ❌不相同:下载出错、文件被修改,不要使用。

⚠️注意: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 == 官方哈希串

常见坑

  1. 不要校验文件名,只看二进制内容,改文件名不会改变哈希;

  2. 换行、BOM、额外空格会改变哈希,复制官方哈希时不要带多余换行空格;

  3. 大小写:哈希字符串大写小写等价,比对时可以统一转小写。


原文链接 https://www.yijunzhao.cn/archives/hash-algorithms-file-integrity-verification-guide

欢迎访问 小易撩挨踢

https://www.yijunzhao.cn/