حساب تجزئات MD5 للملفات الكبيرة في بايثون
توفر وحدة hashlib في بايثون واجهة ملائمة لحساب تجزئات التشفير. ومع ذلك، بالنسبة للملفات الكبيرة بشكل استثنائي والتي يتجاوز حجمها ذاكرة النظام، فإن استخدام hashlib مباشرة يمكن أن يكون مشكلة.
الحل: التجزئة التقدمية
لمعالجة هذه المشكلة، نستخدم التجزئة التقدمية من خلال قراءة الملف في أجزاء يمكن التحكم فيها. يضمن هذا الأسلوب تجزئة محتوى الملف بالكامل دون استهلاك ذاكرة زائدة. فيما يلي نموذج لوظيفة بايثون التي تنفذ هذه التقنية: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 = md5_for_file(f)
ملاحظة حول وضع الملف
تأكد من فتح الملف في الوضع الثنائي باستخدام "rb" للحصول على نتائج دقيقة. يمكن أن يؤدي استخدام "r" إلى حسابات غير صحيحة.
اعتبارات إضافية
للراحة، يتم عرض نسخة محسنة من الوظيفة أدناه:
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()
يوصى بمراجعة التجزئات المحسوبة باستخدام أدوات خارجية مثل jacksum للتحقق من الدقة. تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3