الدرس 8 من 8

المجاميع الاختبارية

هدف الدرس

رقم يكشف عطب البايتات

01

الشرح

حين تقرأ صيغة ملف تجد كثيرًا رقمًا محسوبًا من بايتات البيانات نفسها، وظيفته أن يكشف العطب: إن تغيّر بايت واحد في الطريق لم يعد الرقم يطابق. هذا الرقم اسمه المجموع الاختباري (checksum).

أبسطه أن تجمع البايتات وتأخذ الباقي على 256 فيبقى في بايت واحد، أي sum(data) & 0xFF. لكنه ضعيف، فلو تبادل بايتان مكانيهما بقي المجموع كما هو.

لذلك تستعمل الصيغ الحقيقية CRC32، وهو رقم من 32 بتًا يتغيّر مع أي عطب صغير تقريبًا، حتى تبديل بايتين. ففي PNG مثلًا تنتهي كل قطعة (chunk) بأربعة بايتات هي CRC32 لنوع القطعة وبياناتها، وفي ZIP لكل ملف CRC32 خاصّ به. وفي Python تحسبه الدالة zlib.crc32:

import zlib
a, b = b"ab", b"ba"
sum(a) == sum(b)                # True
zlib.crc32(a) == zlib.crc32(b)  # False

وفي التحليل تحتاجه في اتجاهين: لتتأكّد أن الملف الذي تقرؤه سليم، ولتعيد حسابه حين تعدّل ملفًا لك، لأن البرنامج الذي يقرأ الصيغة يرفض قطعة لا يطابقها مجموعها.

02

المطلوب

اكتب الدالة checksum8(data) التي تُرجع مجموع البايتات بالباقي 256، والدالة verify(data, expected) التي تُرجع True إذا كان CRC32 للبيانات يساوي expected وإلا False، واحسبه بالدالة zlib.crc32.

الفحوص

5 فحوص
  1. المجموع البايتيّ يلتفّ بالباقي 256
  2. المجموع على كتل أخرى
  3. التحقّق يقبل البيانات السليمة
  4. التحقّق يرفض البيانات المعطوبة
  5. محسوب بالدالة zlib.crc32
03

تلميحات

0/3
دروس المسارأتممت 0 من 8

اقرأ الأسمبلي واصطلاح الاستدعاء وتدفّق التحكّم، وابنِ لآلة صغيرة مفكّكًا ومحاكيًا، ثم رقّع بايتاتها وتحقّق من سلامتها.

مستواه متوسّط، وفيه 8 دروس مجموع مدّتها ساعتان.

main.py
المخرجاتPython (Pyodide)

نحمّل بيئة Python الآن. يحدث هذا مرّة واحدة فقط، ثم يحفظها متصفّحك.

–/5

يبدأ الفحص حين تجهز البيئة.

تجد 5 فحوص في بطاقة «المطلوب».

دروس المسارأتممت 0 من 8

اقرأ الأسمبلي واصطلاح الاستدعاء وتدفّق التحكّم، وابنِ لآلة صغيرة مفكّكًا ومحاكيًا، ثم رقّع بايتاتها وتحقّق من سلامتها.

مستواه متوسّط، وفيه 8 دروس مجموع مدّتها ساعتان.