3. 生成固件镜像的SHA-256哈希
任务说明
本案例要求对给定的固件二进制文件计算 SHA-256 哈希值,并输出十六进制摘要。该操作是固件签名、完整性校验和安全启动流程的基础步骤——在后续案例中,生成的摘要将用于固件签名或版本校验。
环境准备
本案例使用 Python 3 标准库 hashlib 实现,无需安装第三方依赖。操作系统不限(Windows/Linux/macOS 均可)。
完整实现代码
import hashlib
import sys
import os
def compute_sha256(file_path: str) -> str:
"""
计算文件的 SHA-256 哈希值,返回十六进制摘要字符串。
"""
sha256_hash = hashlib.sha256()
# 分块读取,避免大文件占用过多内存
with open(file_path, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
sha256_hash.update(chunk)
return sha256_hash.hexdigest()
if __name__ == "__main__":
if len(sys.argv) != 2:
print("用法: python sha256_firmware.py <固件文件路径>")
sys.exit(1)
firmware_path = sys.argv[1]
if not os.path.isfile(firmware_path):
print(f"错误: 文件不存在 - {firmware_path}")
sys.exit(1)
digest = compute_sha256(firmware_path)
print(f"SHA-256 ({os.path.basename(firmware_path)}) = {digest}")
运行方式
- 将上述代码保存为
sha256_firmware.py。 - 准备一个固件文件(例如
firmware.bin),放置于同一目录或指定路径。 - 在终端执行:
python sha256_firmware.py firmware.bin
验证方法
运行后观察终端输出,应显示一行以 SHA-256 (firmware.bin) = 开头的 64 位十六进制字符串。判定通过的依据:
- 程序正常退出,无报错信息;
- 输出的摘要长度为 64 个十六进制字符(即 256 位);
- 使用系统命令交叉验证结果一致:
Linux/macOS:shasum -a 256 firmware.bin
Windows PowerShell:Get-FileHash firmware.bin -Algorithm SHA256
若两个工具输出的摘要与脚本输出完全一致,则验证通过。
预期输出示例
假设 firmware.bin 内容为字符串 hello firmware(不含引号),则预期输出为:
SHA-256 (firmware.bin) = 8f2b7e5d4c3a9f1e6b8d0c2a4e6f8a1b3c5d7e9f0a1b2c3d4e5f6a7b8c9d0e1f
注意:上述摘要是示意格式,实际值取决于文件内容。请以交叉验证结果为准。