hexforge / guides / sha256-integrity

GUIDE 11 / FORENSICS

用 SHA-256 验证文件完整性

哈希值不是“文件密码”,而是内容指纹。正确使用 SHA-256,可以确认两个文件是否逐字节一致,并为后续分析建立可复核的起点。

SHA-256 能证明什么

SHA-256 会把任意长度的输入映射成 256 位摘要,通常写成 64 个十六进制字符。相同文件会产生相同摘要;哪怕只改变一个字节,结果也会明显变化。因此它适合做完整性比对和样本标识。

哈希一致说明两份输入在计算时相同,但哈希本身不能证明文件来自谁,也不能证明内容安全。只有当参考摘要来自可信渠道时,“与参考值一致”才具有来源验证意义。

一个最小验证实验

新建文本文件并写入:

flag{hash_the_original}

计算 SHA-256 并记录结果。随后只把末尾换行删除,或者把一个字母改成大写,再次计算。两个摘要会完全不同。这说明文件名相同、肉眼内容相似,都不能替代逐字节校验。

浏览器与命令行如何交叉验证

本站文件校验工具通过浏览器 Web Crypto API 读取本地文件并计算摘要,文件内容不会上传。为了排除单一工具或复制错误,可以再用系统命令交叉验证:

# Linux / macOS
sha256sum sample.bin

# Windows PowerShell
Get-FileHash .\sample.bin -Algorithm SHA256

比较时忽略十六进制字母大小写,但不要忽略缺失字符、空格之外的符号或算法名称。MD5、SHA-1 和 SHA-256 的结果不能直接互相比较。

在 CTF 取证中的记录方式

  1. 下载或取得样本后立即复制一份只读原件。
  2. 记录原文件名、字节大小、获取时间和 SHA-256。
  3. 后续解压、修复文件头或提取数据都在副本上进行。
  4. 每次产生关键中间文件时重新计算哈希并说明来源。
  5. 提交答案前保留最终文件与完整步骤,确保队友可以复现。

常见误区

把哈希当成加密

摘要没有解密密钥,也不是用来恢复原文的格式。对短口令进行字典猜测,是尝试不同输入后比较摘要,不是“解密哈希”。

比较了错误算法

64 个十六进制字符常见于 SHA-256,但仍应确认工具和题目指定的算法。不要只凭长度就断言来源。

先修改再计算原件哈希

如果打开样本的软件会自动改写元数据,事后计算的哈希已经不能代表最初取得的文件。先保全、先校验,再分析。

把未知参考值当作可信

攻击者也可以同时替换文件和网页上的哈希值。来源验证需要可信发布渠道、数字签名或独立记录配合。

完整性检查清单

  • 算法名称是否明确为 SHA-256。
  • 摘要是否完整包含 64 个 Hex 字符。
  • 文件大小与预期是否一致。
  • 是否保留了未修改的原件。
  • 是否使用第二种工具交叉验证。
  • 参考摘要是否来自可信来源。