在Python

时间:2016-08-06 15:46:31

标签: python hash md5 hashlib

我有一个函数来计算驱动器中所有文件的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 个答案:

答案 0 :(得分: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