在 Python 中计算的文件的 md5 哈希值不正确

md5 hash of file calculated not correct in Python

我有一个函数可以计算驱动器中所有文件的 md5 哈希值。计算了一个哈希值,但它与我使用其他程序或为此设计的在线服务获得的哈希值不同。

def md5_files(path, blocksize = 2**20):
    hasher = hashlib.md5()
    hashes = {}
    for root, dirs, files in os.walk(path):
        for file in files:
            file_path = os.path.join(root, file)
            print(file_path)
            with open(file_path, "rb") as f:
                data = f.read(blocksize)
                if not data:
                    break
                hasher.update(data)
                hashes[file_path] = hasher.hexdigest()
    return hashes

提供的 path 是驱动器号,例如 "K:\" 然后我浏览文件并打开文件进行二进制读取。我读取了 blocksize 中指定大小的数据块。然后我将每个文件的文件名和 md5 哈希存储在一个名为 hashes 的字典中。代码看起来没问题,我还查看了 Stack Overflow 上的其他问题。不知道为什么生成的md5 hash不对

你需要为每个文件构造一个新的md5对象并完整读取它。例如。像这样

def md5_files(path, blocksize = 2**20):    
    hashes = {}
    for root, dirs, files in os.walk(path):
        for file in files:
            file_path = os.path.join(root, file)
            print(file_path)
            with open(file_path, "rb") as f:
                data = f.read(blocksize)
                hasher = hashlib.md5(data)
                while data:
                    data = f.read(blocksize)   
                    hasher.update(data)             
                hashes[file_path] = hasher.hexdigest()
    return hashes