اذهب إلى المحتوى

السؤال

نشر

اعتدت أن استخدم مكتبة hashlib للحصول على هاش MD5 في بايثون 2 و3، وهذه المكتبة تعمل بدون مشاكل مع ملفات الصغيرة والمتوسطة.
المشكلة أنه لدي ملف كبير للغاية(حجمه قد يتجاوز حجم ذاكرة الوصول العشوائي التي أملكها)، فكيف أستطيع الحصول على هاش MD5 لهذا الملف دون أن أقوم بتحميل كامل الملف إلى الذاكرة؟

Recommended Posts

  • 0
نشر

هنالك العديد من الحلول لهذه المشكلة ولكنها جميعها تشترك في أنه يجب عليك تقسيم الملف إلى أجزاء وقراءة كل جزء على حدة، ومن أفضل الطرق  تقسيم الملف إلى أجزاء بحجم 128 بابت ومن ثم بناء رمز MD5 عن طريق ترميزهم تباعا ودمجهم باستخدام update()، مثال على قراءة أجزاء من الملف:

f = open(fileName)
while not endOfFile:
    f.read(128)

أو لقراءة الملف بشكل أسرع يمكنك استخدام هذه الدالة والتي تقرأ الملف بشكل أجزاء ومن ثم تقوم بترميزه:

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

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...