You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python计算文件SHA512哈希值每次运行结果不一致如何解决

问题原因
  • 核心错误:哈希对象初始化放在了遍历文件的循环外部,hashlib的哈希实例调用update()方法是累加计算内容,后续文件的哈希值会包含前面所有已遍历文件的内容,自然无法和单个文件的内容一一对应。
  • 次要影响因素:os.listdir()返回的文件列表顺序不固定,且当前逻辑会把运行后生成的hash.txt也纳入计算范围,都会导致最终输出结果不稳定。
修复方案

将哈希对象的初始化移动到文件遍历循环内部,保证每个文件都用全新的哈希实例计算,可选增加文件排序和过滤逻辑,保证结果完全固定,修复后代码如下:

import sys
import os
import hashlib

BUF_SIZE = 65536  # 64KB分块读取,适配大文件计算

# 筛选文件:排除生成的hash.txt,同时排序保证遍历顺序固定
files = sorted([f for f in os.listdir('.') if os.path.isfile(f) and f != "hash.txt"])

hashes = []

for file in files:
    # 每个文件新建独立的SHA512实例
    sha512 = hashlib.sha512()
    with open(file, 'rb') as f:
        while True:
            data = f.read(BUF_SIZE)
            if not data:
                break
            sha512.update(data)
    hashes.append(f"{file}|{sha512.hexdigest()}")

with open("hash.txt", 'w+', encoding='utf-8') as f:
    for h in hashes:
        f.write(h+'\n')
        print(h)
验证方法

你可以用系统自带的哈希校验工具和脚本输出结果做对比,确认单个文件哈希正确:

  • Windows系统:运行命令 certutil -hashfile 你的文件名 SHA512
  • Linux/macOS系统:运行命令 shasum -a 512 你的文件名

内容的提问来源于stack exchange,提问作者acnguy2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:39:00