"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية حساب تجزئة MD5 للملفات الكبيرة بكفاءة في بايثون

كيفية حساب تجزئة MD5 للملفات الكبيرة بكفاءة في بايثون

تم النشر بتاريخ 2024-11-04
تصفح:723

How to Efficiently Compute MD5 Hash of Large Files in Python

حساب تجزئة MD5 للملفات الكبيرة بكفاءة في Python

في بعض السيناريوهات، يصبح من الضروري حساب تجزئة MD5 للملفات الكبيرة التي تتجاوز ذاكرة الوصول العشوائي المتوفرة. وظيفة بايثون الأصلية hashlib.md5() ليست مناسبة لمثل هذه السيناريوهات لأنها تتطلب تحميل الملف بأكمله في الذاكرة.

للتغلب على هذا القيد، النهج العملي هو قراءة الملف في أجزاء يمكن التحكم فيها و تحديث التجزئة بشكل متكرر. وهذا يسمح بحساب التجزئة بكفاءة دون تجاوز حدود الذاكرة.

تنفيذ التعليمات البرمجية

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()

مثال للاستخدام

لحساب تجزئة MD5 لملف، استخدم بناء الجملة التالي:

with open(filename, 'rb') as f:
    md5_hash = md5_for_file(f)

سيحتوي المتغير md5_hash على تجزئة MD5 المحسوبة ككائن يشبه البايت.

اعتبارات إضافية

تأكد من فتح الملف بالنظام الثنائي الوضع ('rb') لتجنب النتائج غير الصحيحة. لمعالجة الملفات بشكل شامل، خذ بعين الاعتبار الوظيفة التالية:

import os
import hashlib

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()

تأخذ هذه الوظيفة مسار الملف وترجع تجزئة MD5 كسلسلة سداسية عشرية.

باستخدام هذه التقنيات، يمكنك حساب تجزئة MD5 بكفاءة للملفات الكبيرة دون مواجهة قيود الذاكرة.

بيان الافراج أعيد طبع هذه المقالة على: 1729387820 في حالة وجود أي انتهاك، يرجى الاتصال بـ [email protected] لحذفها
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3