🔐 تمارين التشفير والترميز (30 تمرين)
شيفرة قيصر - تشفير
اكتب دالة تأخذ نصاً ومقدار الإزاحة وتُرجع النص مشفراً بشيفرة قيصر. شيفرة قيصر تزيح كل حرف بمقدار ثابت في الأبجدية الإنجليزية.
💡 تلميح
استخدم باقي القسمة % 26 لإعادة الحرف إلى بداية الأبجدية عند تجاوز الحرف z
📝 عرض الحل
شيفرة قيصر - فك التشفير
اكتب دالة تأخذ نصاً مشفراً بشيفرة قيصر ومقدار الإزاحة وتُرجع النص الأصلي.
💡 تلميح
فك التشفير هو عكس التشفير: اطرح الإزاحة بدلاً من جمعها، وأضف 26 لتجنب القيم السالبة
📝 عرض الحل
تشفير XOR بسيط
اكتب دالة تأخذ نصاً ومفتاحاً رقمياً وتُشفر كل حرف باستخدام عملية XOR مع المفتاح. ثم اكتب دالة لفك التشفير.
💡 تلميح
عملية XOR (^) مع نفس المفتاح مرتين تُعيد القيمة الأصلية: (أ ^ ب) ^ ب = أ
📝 عرض الحل
ترميز الأعداد
اكتب دالة تأخذ عدداً صحيحاً وتحوّله إلى نص مشفر حيث كل رقم يُستبدل بحرف (0→أ، 1→ب، 2→ت، ...). واكتب دالة عكسية لفك الترميز.
💡 تلميح
أنشئ مصفوفة من الأحرف العربية واستخدم الرقم كفهرس للوصول إلى الحرف المقابل
📝 عرض الحل
عكس النص للتشفير
اكتب دالة تُشفر النص عن طريق عكسه ثم إزاحة كل حرف بموقعه في النص. واكتب دالة فك التشفير.
💡 تلميح
اعكس النص أولاً ثم أضف لكل حرف قيمة رقمية تعتمد على موقعه
📝 عرض الحل
مجموع التحقق البسيط
اكتب دالة تحسب مجموع التحقق (checksum) لنص عن طريق جمع القيم الرقمية لكل حرف ثم إرجاع الباقي من القسمة على 256.
💡 تلميح
استخدم كود_حرف() للحصول على القيمة الرقمية لكل حرف وباقي القسمة % 256 للحصول على قيمة بين 0 و 255
📝 عرض الحل
شيفرة ROT13
اكتب دالة تُطبق شيفرة ROT13 على نص إنجليزي. ROT13 تزيح كل حرف بمقدار 13 موقعاً. تطبيقها مرتين يُعيد النص الأصلي.
💡 تلميح
ROT13 هي حالة خاصة من شيفرة قيصر بإزاحة 13. بما أن 13 + 13 = 26 (عدد أحرف الأبجدية)، تطبيقها مرتين يعيد الأصل
📝 عرض الحل
الاستبدال الأبجدي
اكتب دالة تُشفر نصاً باستخدام جدول استبدال بسيط حيث كل حرف من الأبجدية يُستبدل بحرف آخر محدد مسبقاً.
💡 تلميح
ابحث عن موقع كل حرف في الأبجدية الأصلية واستبدله بالحرف في نفس الموقع من الأبجدية البديلة
📝 عرض الحل
ترميز وفك ترميز Base
اكتب دالتين: واحدة تحوّل عدداً من النظام العشري إلى نظام عد معين (مثل 16)، وأخرى تعيده إلى العشري.
💡 تلميح
للتحويل: اقسم على القاعدة مراراً واجمع البواقي. للعكس: اضرب في القاعدة وأضف قيمة كل رمز
📝 عرض الحل
دالة التجزئة البسيطة
اكتب دالة تجزئة (hash) بسيطة تأخذ نصاً وتُرجع عدداً صحيحاً. يجب أن تُعطي نفس النتيجة لنفس المدخل دائماً.
💡 تلميح
استخدم خوارزمية مشهورة: اضرب القيمة الحالية في عدد أولي (مثل 31) وأضف كود الحرف مع أخذ الباقي من عدد أولي كبير
📝 عرض الحل
شيفرة فيجنير
اكتب دالتي تشفير وفك تشفير باستخدام شيفرة فيجنير. هذه الشيفرة تستخدم كلمة مفتاح بدلاً من إزاحة ثابتة، حيث كل حرف في المفتاح يُحدد إزاحة مختلفة.
💡 تلميح
كل حرف في المفتاح يُحدد إزاحة مختلفة. استخدم عداداً للتنقل بين أحرف المفتاح بشكل دوري باستخدام %
📝 عرض الحل
شيفرة التبديل (Transposition)
اكتب دالة تُشفر نصاً باستخدام شيفرة التبديل العمودية. توضع الأحرف في صفوف بعرض المفتاح ثم تُقرأ عمودياً.
💡 تلميح
لكل عمود (من 0 إلى عرض-1)، اجمع الأحرف بقفز مقداره العرض: موقع، موقع+عرض، موقع+2×عرض، ...
📝 عرض الحل
تحليل التكرار
اكتب دالة تُحلل تكرار الأحرف في نص مشفر وتُرجع الأحرف مرتبة من الأكثر تكراراً إلى الأقل. هذا يُساعد في كسر شيفرات الاستبدال.
💡 تلميح
استخدم مصفوفتين متوازيتين: واحدة للأحرف وأخرى للعدادات. ثم رتّبهما ترتيباً تنازلياً حسب العدّادات
📝 عرض الحل
فاحص قوة كلمة المرور
اكتب دالة تفحص قوة كلمة مرور وتُعطيها درجة من 0 إلى 100. المعايير: الطول، وجود أحرف كبيرة وصغيرة، أرقام، رموز خاصة، عدم التكرار.
💡 تلميح
قسّم الدرجة حسب المعايير: طول ≥ 8 (20 نقطة)، أحرف صغيرة (15)، كبيرة (15)، أرقام (15)، رموز (25)، طول ≥ 12 مكافأة (10)
📝 عرض الحل
تجزئة مع ملح
اكتب دالة تجزئة تُضيف "ملحاً" (salt) - نص عشوائي يُضاف للمدخل قبل التجزئة لمنع هجمات جدول قوس قزح.
💡 تلميح
ادمج الملح مع النص قبل التجزئة (مثلاً: ملح + نص + ملح) ثم طبّق دالة تجزئة. دالة التحقق تُعيد حساب التجزئة وتقارن
📝 عرض الحل
ترميز وفك ترميز Run-Length
اكتب دالتي ترميز وفك ترميز Run-Length Encoding (RLE). هذا الترميز يستبدل التسلسلات المتكررة بالحرف وعدد تكراراته.
💡 تلميح
للترميز: عُد تكرارات كل حرف متتالي. لفك الترميز: اقرأ حرفاً ثم اقرأ الأرقام التي تليه لتعرف العدد
📝 عرض الحل
التشفير بمفتاح متعدد
اكتب دالة تُشفر نصاً باستخدام مفتاح رقمي مكون من عدة أرقام. كل رقم في المفتاح يُستخدم لإزاحة حرف مختلف بالتناوب.
💡 تلميح
استخدم موقع الحرف % طول المفتاح لتحديد أي رقم من المفتاح يُستخدم لكل حرف
📝 عرض الحل
إخفاء المعلومات في النص
اكتب دالة تُخفي رسالة سرية داخل نص عادي عن طريق استبدال المسافات بأنواع مختلفة (مسافة عادية = 0، مسافتان = 1) لتمثيل بتات الرسالة.
💡 تلميح
حوّل الرسالة إلى بتات (0 و 1). عند كل مسافة في النص: مسافة واحدة = بت 0، مسافتان = بت 1
📝 عرض الحل
ترميز تحويل القاعدة
اكتب دالة تُرمّز نصاً عن طريق تحويل كل حرف إلى تمثيله في نظام عدّ أساس 36 (أرقام 0-9 + أحرف a-z). واكتب دالة عكسية.
💡 تلميح
حوّل كود كل حرف إلى قاعدة 36 ثم افصل بينها بفاصل مثل - لسهولة فك الترميز
📝 عرض الحل
توقيع الرسائل البسيط
اكتب نظام توقيع بسيط حيث يُمكن توقيع رسالة بمفتاح سري والتحقق من صحة التوقيع لاحقاً.
💡 تلميح
التوقيع هو تجزئة (مفتاح + رسالة). للتحقق: أعد حساب التجزئة وقارنها بالتوقيع المُعطى
📝 عرض الحل
مولد كلمات مرور
اكتب دالة تُولّد كلمة مرور عشوائية بطول محدد تحتوي على أحرف كبيرة وصغيرة وأرقام ورموز.
💡 تلميح
أنشئ نصاً يحتوي على كل الأحرف المسموح بها ثم اختر منها عشوائياً باستخدام دالة عشوائي()
📝 عرض الحل
شيفرة السياج (Rail Fence)
اكتب دالة تُشفر نصاً باستخدام شيفرة السياج. النص يُكتب بشكل متعرج على عدة سطور ثم يُقرأ سطراً سطراً.
💡 تلميح
أنشئ مصفوفة فارغة لكل سطر. تحرّك صعوداً ونزولاً بين السطور وأضف كل حرف للسطر الحالي. في النهاية ادمج كل السطور
📝 عرض الحل
الرفع إلى أس مع باقي القسمة (Modular Exponentiation)
اكتب دالة تحسب (قاعدة^أس) % معامل بكفاءة باستخدام التربيع المتكرر. هذه العملية أساسية في خوارزميات التشفير مثل RSA.
💡 تلميح
استخدم التربيع المتكرر: إذا كان الأس زوجياً ربّع القاعدة وانصّف الأس. إذا كان فردياً اضرب النتيجة بالقاعدة. خذ الباقي في كل خطوة
📝 عرض الحل
محاكاة شيفرة الكتل (Block Cipher)
اكتب نظام تشفير كتلي بسيط. قسّم النص إلى كتل بحجم ثابت، طبّق عمليات XOR والتبديل على كل كتلة مع المفتاح، ثم ادمج النتائج.
💡 تلميح
قسّم النص إلى كتل متساوية (أضف حشواً إذا لزم). لكل كتلة: XOR مع المفتاح ثم اعكس الترتيب. لفك التشفير: اعكس الترتيب ثم XOR
📝 عرض الحل
سلسلة التجزئة (Hash Chain)
اكتب نظام سلسلة تجزئة حيث كل عنصر يعتمد على تجزئة العنصر السابق. هذا مفهوم أساسي في سلسلة الكتل (Blockchain).
💡 تلميح
كل كتلة تحتوي: البيانات، تجزئة الكتلة السابقة، وتجزئتها الخاصة = تجزئة(سابقة + بيانات). للتحقق: أعد حساب كل تجزئة وتأكد من تطابق الروابط
📝 عرض الحل
لغز تشفيري (Proof of Work)
اكتب نظام إثبات العمل البسيط: ابحث عن رقم (nonce) بحيث أن تجزئة (بيانات + nonce) تبدأ بعدد محدد من الأصفار.
💡 تلميح
جرّب أرقاماً متزايدة (0، 1، 2، ...) واحسب تجزئة(بيانات + رقم) في كل مرة حتى يكون باقي القسمة على 10^صعوبة يساوي صفراً
📝 عرض الحل
اشتقاق المفتاح (Key Derivation)
اكتب دالة اشتقاق مفتاح تأخذ كلمة مرور وملحاً وتُنتج مفتاحاً بطول محدد عن طريق تطبيق التجزئة بشكل متكرر.
💡 تلميح
كرّر التجزئة عدة مرات: ابدأ بـ تجزئة(كلمة_مرور + ملح) ثم تجزئة(النتيجة + ملح) وهكذا. لتوليد المفتاح بطول محدد، استخدم عدة تجزئات
📝 عرض الحل
مخزن الرسائل المشفرة
اكتب نظاماً كاملاً لتخزين واسترجاع رسائل مشفرة. يدعم إضافة رسالة بمفتاح، قراءة رسالة بمفتاح، وعرض قائمة الرسائل.
💡 تلميح
استخدم مصفوفة كمخزن. كل عنصر يحتوي: العنوان، البيانات المشفرة (XOR مع المفتاح)، وبصمة المفتاح (تجزئته) للتحقق عند القراءة
📝 عرض الحل
محاكاة التوقيع الرقمي
اكتب نظام توقيع رقمي مبسط يحاكي مفهوم المفتاح العام والخاص. استخدم عمليات رياضية لتوليد زوج مفاتيح وتوقيع رسائل والتحقق منها.
💡 تلميح
استخدم مفهوم RSA المبسط: المفتاح العام (e, n) والخاص (d, n). التوقيع = ملخص^d mod n. التحقق = توقيع^e mod n == ملخص
📝 عرض الحل
محاكاة تبادل مفاتيح ديفي-هيلمان
اكتب محاكاة لبروتوكول ديفي-هيلمان لتبادل المفاتيح. طرفان يتبادلان قيماً علنية ويتوصلان لمفتاح سري مشترك دون إرساله.
💡 تلميح
القيمة العامة = g^سر mod p. المفتاح المشترك: عُلا تحسب (عام_باسم)^سر_عُلا mod p، وباسم يحسب (عام_عُلا)^سر_باسم mod p — النتيجة واحدة!