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

Barbara Streisand
Libérer: 2024-10-20 11:06:30
original
817 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!