Maison  >  Article  >  développement back-end  >  Comment hacher des fichiers volumineux en Python sans surconsommation de mémoire ?

Comment hacher des fichiers volumineux en Python sans surconsommation de mémoire ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-20 11:06:30819parcourir

How to Hash Large Files in Python without Memory Overconsumption?

Calcul des hachages MD5 pour les fichiers volumineux en Python

Le module hashlib de Python fournit une interface pratique pour calculer les hachages cryptographiques. Cependant, pour les fichiers exceptionnellement volumineux dont la taille dépasse la mémoire système, l'utilisation directe de hashlib peut s'avérer problématique.

Solution : hachage progressif

Pour résoudre ce problème, nous utilisons le hachage progressif. en lisant le fichier en morceaux gérables. Cette approche garantit que l'intégralité du contenu du fichier est hachée sans consommer de mémoire excessive. Voici un exemple de fonction Python qui implémente cette technique :

<code class="python">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()</code>

Pour calculer le hachage MD5 d'un fichier volumineux, vous pouvez appeler la fonction comme suit :

<code class="python">with open("filename", "rb") as f:
    md5 = md5_for_file(f)</code>

Remarque en mode fichier

Assurez-vous d'ouvrir le fichier en mode binaire avec "rb" pour des résultats précis. L'utilisation de « r » peut entraîner des calculs incorrects.

Considérations supplémentaires

Pour plus de commodité, une version améliorée de la fonction est présentée ci-dessous :

<code class="python">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()</code>

Il est recommandé de recouper les hachages calculés avec des outils externes comme Jacksum pour vérifier l'exactitude.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn