Computando hashes MD5 para arquivos grandes em Python
O módulo hashlib do Python fornece uma interface conveniente para calcular hashes criptográficos. No entanto, para arquivos excepcionalmente grandes cujo tamanho excede a memória do sistema, usar hashlib diretamente pode ser problemático.
Solução: Hashing progressivo
Para resolver esse problema, empregamos hashing progressivo lendo o arquivo em partes gerenciáveis. Essa abordagem garante que todo o conteúdo do arquivo seja criptografado sem consumir memória excessiva. Aqui está um exemplo de função Python que implementa esta técnica:
import hashlib
def md5_for_file(f):
block_size = 2**20
md5 = hashlib.md5()
while True:
data = f.read(block_size)
if not data:
break
md5.update(data)
return md5.digest()
Para calcular o hash MD5 de um arquivo grande, você pode invocar a função da seguinte forma:
with open("filename", "rb") as f:
md5 = md5_for_file(f)
Nota sobre o modo de arquivo
Certifique-se de abrir o arquivo no modo binário com "rb" para obter resultados precisos. Usar "r" pode levar a cálculos incorretos.
Considerações Adicionais
Para maior comodidade, uma versão melhorada da função é apresentada abaixo:
import hashlib
import os
def generate_file_md5(rootdir, filename):
m = hashlib.md5()
with open(os.path.join(rootdir, filename), "rb") as f:
buf = f.read()
while buf:
m.update(buf)
buf = f.read()
return m.hexdigest()
A verificação cruzada dos hashes calculados com ferramentas externas como jacksum é recomendada para verificar a precisão.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3