在 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
我有一个函数可以计算驱动器中所有文件的 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