首页 文章

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

提问于
浏览
1

我有一个函数来计算驱动器中所有文件的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哈希是错误的 .

1 回答

  • 1

    你需要为每个文件构造一个新的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
    

相关问题