2
我需要計算zip文件內容的CRC32,MD5和SHA1而不解壓縮它們。在Python中無需解壓縮計算zip32內容的CRC32,MD5和SHA1
到目前爲止,我發現瞭如何計算這些對zip文件本身,如:
CRC32:
import zlib
zip_name = "test.zip"
def Crc32Hasher(file_path):
buf_size = 65536
crc32 = 0
with open(file_path, 'rb') as f:
while True:
data = f.read(buf_size)
if not data:
break
crc32 = zlib.crc32(data, crc32)
return format(crc32 & 0xFFFFFFFF, '08x')
print(Crc32Hasher(zip_name))
SHA1:(MD5下同)
import hashlib
zip_name = "test.zip"
def Sha1Hasher(file_path):
buf_size = 65536
sha1 = hashlib.sha1()
with open(file_path, 'rb') as f:
while True:
data = f.read(buf_size)
if not data:
break
sha1.update(data)
return format(sha1.hexdigest())
print(Sha1Hasher(zip_name))
對於zip文件的內容,我可以直接從zip中讀取CRC32,而無需計算它如下:zip壓縮內容
讀CRC32:
import zipfile
zip_name = "test.zip"
if zip_name.lower().endswith(('.zip')):
z = zipfile.ZipFile(zip_name, "r")
for info in z.infolist():
print(info.filename,
format(info.CRC & 0xFFFFFFFF, '08x'))
但我無法弄清楚如何計算的zip文件內容的SHA1(或MD5)不首先把它們解。 這是可能的嗎?
謝謝回答拉鍊。什麼是最有效的內存方式呢? – paradadf
@paradadf更新了答案 – Marat