• 0

كيف أحصل على MD5 لملف ضخم في بايثون؟

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

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 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()

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن