Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengira Hash MD5 Fail Besar dalam Python dengan Cekap?

Bagaimana untuk Mengira Hash MD5 Fail Besar dalam Python dengan Cekap?

Patricia Arquette
Patricia Arquetteasal
2024-10-20 11:29:30197semak imbas

How to Calculate MD5 Hash of Large Files in Python Efficiently?

Mengira Hash MD5 bagi Fail Besar dalam Python

Apabila bekerja dengan fail yang sangat besar, kaedah tradisional mengira cincang MD5 menggunakan perpustakaan hashlib menjadi tidak praktikal kerana ia memerlukan memuatkan keseluruhan fail ke dalam ingatan. Pendekatan ini mungkin meletihkan sumber sistem, yang membawa kepada ralat dan kelembapan.

Penyelesaian: Pencincangan Potongan

Untuk menangani isu ini, teknik yang dipanggil pencincangan chunked boleh digunakan untuk mengira Cincang MD5 secara berperingkat tanpa memuatkan keseluruhan fail ke dalam memori. Ini melibatkan:

  1. Membahagikan fail kepada ketulan yang lebih kecil dengan saiz yang boleh diurus (cth., 1 MB).
  2. Mengira cincangan MD5 setiap bahagian menggunakan hashlib.md5().
  3. Menggabungkan bahagian cincang untuk mendapatkan cincang MD5 akhir.

Pelaksanaan Kod:

Fungsi Python berikut md5_for_file() melaksanakan pencincangan potongan:

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

Untuk menggunakan fungsi ini, pastikan anda membuka fail dengan mod binari (rb).

Kaedah Lengkap:

Untuk kemudahan, berikut ialah kaedah lengkap generate_file_md5() yang menggabungkan pencincangan ketulan dengan pembukaan fail dalam satu langkah:

<code class="python">def generate_file_md5(rootdir, filename, blocksize=2**20):
    m = hashlib.md5()
    with open(os.path.join(rootdir, filename), "rb") as f:
        while True:
            buf = f.read(blocksize)
            if not buf:
                break
            m.update(buf)
    return m.hexdigest()</code>

Kaedah ini mengembalikan cincangan MD5 berkod hex bagi fail yang ditentukan sebagai rentetan. Anda boleh mengesahkan keputusan menggunakan alat luaran seperti jacksum sebagai perbandingan.

Atas ialah kandungan terperinci Bagaimana untuk Mengira Hash MD5 Fail Besar dalam Python dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn