"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como fazer hash de arquivos grandes em Python sem consumo excessivo de memória?

Como fazer hash de arquivos grandes em Python sem consumo excessivo de memória?

Publicado em 2024-11-06
Navegar:530

How to Hash Large Files in Python without Memory Overconsumption?

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.

Declaração de lançamento Este artigo foi reimpresso em: 1729388119 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

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