CryptoEdu Pro هو تطبيق مكتبي تعليمي يساعد الطلاب والمطورين على تجربة خوارزميات التشفير، ومشاهدة النتائج، وفهم الكود والعمليات الرياضية خلف كل خوارزمية من خلال واجهة رسومية حديثة تدعم العربية والإنجليزية.
نظرة عامة · المزايا · التثبيت والتشغيل · الخوارزميات · البنية · خطة التطوير
تم تصميم المشروع ليكون مساحة تعليمية عملية بدلًا من الاكتفاء بالشرح النظري. يختار المستخدم خوارزمية، يدخل النص والمفتاح المناسب، ثم يستطيع:
- تشفير النص أو فك تشفيره.
- نسخ النتيجة أو نقلها إلى خانة الإدخال.
- مشاهدة تحليل بصري وتدريجي للعملية.
- الاطلاع على الكود الكامل للخوارزمية.
- قراءة شرح مبسط لكل جزء من الكود.
- تغيير اللغة والثيم أثناء الاستخدام.
- تجربة أمثلة جاهزة من خلال Quick Test.
تنبيه مهم: هذا المشروع تعليمي. الخوارزميات الموجودة هنا مطبقة من الصفر بهدف الفهم والتجربة، ولا ينبغي استخدامها لحماية بيانات حقيقية أو في أنظمة إنتاجية.
تنبيه تعليمي: لا تستخدم هذا المشروع لتشفير كلمات المرور أو الملفات أو البيانات الحساسة. للاستخدام العملي، اعتمد على مكتبات تشفير موثوقة ومراجعة أمنيًا.
- واجهة رسومية مبنية باستخدام CustomTkinter.
- تبويب للتشفير العملي وتبويب لشرح الكود.
- تحليل خطوة بخطوة لبعض الخوارزميات.
- عرض الصيغ الرياضية والمصفوفات والمراحل الوسيطة عند توفرها.
- أمثلة تشغيل جاهزة لكل خوارزمية.
- العربية كلغة افتراضية.
- الإنجليزية.
- معالجة أولية لمشكلة اتجاه النص المختلط RTL/LTR.
- واجهة قابلة للتبديل أثناء تشغيل التطبيق.
- ثيم Midnight.
- ثيم Ocean.
- ثيم Purple Haze.
- ثيم Emerald.
- سجل مختصر للعمليات الأخيرة.
- عداد الحروف والكلمات.
- ألوان منفصلة للتشفير وفك التشفير والحالات المختلفة.
| الخوارزمية | النوع | الهدف التعليمي | شكل الإدخال الأساسي |
|---|---|---|---|
| Caesar | استبدال بسيط | فهم الإزاحة الأبجدية | نص + رقم الإزاحة |
| Affine | استبدال رياضي | فهم الدالة (m × x + k) mod 26 |
نص + m + k |
| Vigenère | استبدال متعدد الأبجديات | فهم المفتاح الدوري | نص + كلمة مفتاحية |
| Playfair | استبدال أزواج | فهم مصفوفة 5×5 | نص + كلمة مفتاحية |
| Hill | تشفير بالمصفوفات | فهم ضرب المصفوفات modulo 26 | نص + مصفوفة 2×2 |
| Diffie-Hellman | تبادل مفاتيح | فهم إنشاء مفتاح مشترك | p وg وa وb |
| RSA | تشفير غير متماثل | فهم المفاتيح العامة والخاصة | p وq وe |
| S-DES | تشفير كتلي مبسط | فهم الجولات والمفاتيح الفرعية | كتلة 8-bit + مفتاح 10-bit |
| DES | تشفير كتلي | دراسة Feistel والجولات والمبدلات | كتلة 64-bit + مفتاح 64-bit |
- التنفيذ الحالي موجه أساسًا للنصوص والأبجديات الإنجليزية في الخوارزميات الكلاسيكية.
- واجهة التطبيق تدعم العربية، لكن هذا لا يعني أن كل خوارزمية تدعم تشفير الأحرف العربية رياضيًا.
- بعض الخوارزميات، مثل S-DES وDES، تتطلب إدخالًا ثنائيًا بطول محدد.
- RSA وDES هنا لأغراض تعليمية، وليس كبديل لمكتبات التشفير الموثوقة.
- Python 3.10 أو أحدث.
- Tkinter.
- نظام Windows أو Linux أو macOS يدعم Tkinter.
- الاعتماديات الموجودة في
requirements.txt.
customtkinter>=5.2.0
pyperclip
git clone https://github.com/Dev-KAIDO/CryptoEdu-Pro.git
cd CryptoEdu-Propython -m venv .venv
.venv\Scripts\activatepython3 -m venv .venv
source .venv/bin/activatepython -m pip install --upgrade pip
python -m pip install -r requirements.txtpython main.pyفي Linux قد تحتاج إلى تثبيت حزمة Tkinter من مدير الحزم، مثل
python3-tk.
- شغّل التطبيق.
- اختر الخوارزمية من القائمة الجانبية.
- أدخل النص أو الكتلة الثنائية المطلوبة.
- أدخل المفتاح أو القيم الرياضية المطلوبة.
- اضغط تشفير أو فك التشفير.
- استخدم التحليل لمشاهدة خطوات العملية.
- انتقل إلى تبويب شرح الكود لمراجعة التنفيذ والمثال.
- استخدم Quick Test لتعبئة مثال جاهز تلقائيًا.
Input: HELLO WORLD
Key: 3
Output: KHOOR ZRUOG
Input: ATTACKATDAWN
Key: LEMON
Output: LXFOPVEFRNHR
p = 61
q = 53
e = 17
ينشئ التطبيق القيم الرياضية اللازمة داخليًا ويعرض النص المشفر على شكل أرقام مفصولة بفواصل.
Plaintext: 10101101
Key: 1010110011
Result: 00111100
يعمل التطبيق على كتلة ثنائية بطول 64 بت ومفتاح ثنائي بطول 64 بت، ويعرض خطوات التبديل والجولات في صفحة التحليل.
CryptoEdu-Pro/
├── main.py # نقطة التشغيل وواجهة التطبيق الرئيسية
├── core/
│ ├── algorithms.py # تنفيذ الخوارزميات ومواد الشرح
│ ├── app_state.py # الحالة العامة القابلة للتغيير دون Widgets
│ ├── controller.py # إدارة Worker والعمليات والنتائج
│ ├── registry.py # السجل المركزي لتعريف الخوارزميات وحقولها
│ ├── education.py # أمثلة الكود والشرح التعليمي للواجهة
│ ├── service.py # طبقة تنفيذ مستقلة عن واجهة المستخدم
│ └── textutils.py # أدوات معالجة اتجاه النص المختلط
├── ui/
│ ├── styles.py # الألوان والخطوط والأحجام
│ ├── translations.py # النصوص العربية والإنجليزية
│ ├── widgets.py # مكونات واجهة قابلة لإعادة الاستخدام
│ ├── analysis_view.py # صفحة التحليل الرسومي وشرح خطوات الخوارزميات
│ ├── key_fields.py # إنشاء وقراءة حقول مفاتيح الخوارزميات
│ ├── code_view.py # تبويب الكود الكامل والشرح والتلوين
│ ├── crypto_view.py # تبويب التشفير وبطاقات الإدخال والنتائج
│ ├── sidebar_view.py # الشريط الجانبي والإعدادات والسجل
│ ├── language_manager.py # اختيار اللغة والترجمة واتجاه RTL
│ └── theme_manager.py # تعريفات الثيمات واختيارها والتحقق منها
├── tests/
│ ├── test_algorithms.py # اختبارات الرجوع والتحقق من المدخلات
│ ├── test_controller.py # اختبارات دورة حياة العمليات الخلفية
│ ├── test_language_manager.py # اختبارات إدارة اللغات والترجمة
│ ├── test_service.py # اختبارات طبقة تنفيذ العمليات
│ ├── test_theme_manager.py # اختبارات إدارة الثيمات
│ ├── test_registry.py # اختبارات عقد Registry والتوافق
│ └── test_ui_smoke.py # اختبار واجهة اختياري عبر Xvfb
├── tools/
│ ├── benchmark.py # قياس أداء الخوارزميات دون اعتماديات إضافية
│ └── legacy/ # سكربتات الإصلاح التاريخية غير المطلوبة للتشغيل
├── .github/workflows/ci.yml # فحص الجودة والاختبارات والبناء
├── pyproject.toml # إعداد Ruff واكتشاف الاختبارات وبيانات الحزمة
├── CHANGELOG.md # سجل الإصدارات والتغييرات
├── LICENSE # ترخيص MIT
├── CryptoEdu.spec # إعداد بناء PyInstaller
├── cryptoedu.ico # أيقونة التطبيق
├── requirements.txt # الاعتماديات
└── README.md # توثيق المشروع
flowchart LR
A[واجهة CryptoEdu Pro] --> B[SidebarViewMixin\nاللغة والثيم والسجل]
A --> C[CryptoViewMixin\nتبويب التشفير العملي]
A --> D[تبويب شرح الكود والتحليل]
C --> E[CryptoOperationService]
E --> R[Algorithm Registry]
R --> K[Key Fields and Cipher Menu]
A --> S[AppState]
A --> Ctl[CryptoController]
Ctl --> E
E --> F[CryptoCore]
F --> G[Classical Ciphers]
F --> H[RSA / Diffie-Hellman]
F --> I[S-DES / DES]
D --> F
A --> J[السجل و Quick Test]
تم تنظيم ملفات الإصلاح التاريخية التي استُخدمت أثناء التطوير داخل tools/legacy/. هذه الملفات غير مطلوبة لتشغيل التطبيق، ولا ينبغي استخدامها على نسخة جديدة من المشروع.
يوجد ملف إعداد مبدئي لـ PyInstaller باسم:
CryptoEdu.spec
بعد تثبيت PyInstaller يمكن تجربة البناء باستخدام:
python -m pip install pyinstaller
pyinstaller CryptoEdu.specستظهر الملفات الناتجة عادة داخل مجلدي build/ وdist/.
يفضل اختبار النسخة التنفيذية على جهاز نظيف قبل توزيعها، والتأكد من وجود الأيقونة والموارد والمكونات المطلوبة.
المشروع يعمل كنسخة تعليمية قابلة للتجربة، وقد تم اختبار تشغيل الواجهة وتجربة الخوارزميات الأساسية. ومع ذلك، ما زالت هناك أعمال تحسين مهمة قبل اعتباره إصدارًا مستقرًا أو جاهزًا للاستخدام العام.
- تحسين التحقق من المدخلات ورسائل الأخطاء.
- تحديد أو توسيع دعم الأبجدية العربية داخل الخوارزميات.
- إضافة اختبارات تلقائية مستقلة.
- تنظيف ملفات Python المؤقتة والملفات الناتجة من البناء.
- تقسيم
main.pyإلى وحدات أصغر وأكثر قابلية للصيانة. - تحسين توثيق الأمثلة والنتائج.
- إضافة GitHub Actions للفحص والبناء.
- تحسين الوصولية وتجربة الاستخدام.
- منع Vigenère من الانهيار عند المفتاح الفارغ أو غير الصالح.
- منع Playfair وHill من الانهيار عند الرموز أو الأطوال غير المناسبة.
- إضافة تحقق للقيم غير الصالحة في Diffie-Hellman.
- تقوية تحقق RSA ومنع فقدان البيانات عندما تكون قيمة الحرف أكبر من
n. - منع تحويل الأحرف غير الإنجليزية إلى نتائج خاطئة بصمت.
- إضافة اختبارات تلقائية للرجوع والتحقق من المدخلات وCache.
- تصحيح مثال RSA داخل واجهة شرح الكود ليطابق الناتج الفعلي.
- توحيد مساري التشفير وفك التشفير في معالج واحد داخل الواجهة.
- توحيد نص عداد العمليات عبر ملفات الترجمة بدل النصوص الثابتة.
- فصل اختيار الخوارزمية وقراءة المفاتيح في
core/service.pyبعيدًا عن Tkinter. - إضافة اختبارات مباشرة لطبقة الخدمة، ليصبح إجمالي الاختبارات 26 اختبارًا.
- نقل كتالوج الأكواد والشروحات إلى
core/education.pyمع إبقاء واجهات التوافق القديمة. - فرض حدود للنصوص والأعداد في الوضع التعليمي لمنع استهلاك الموارد المفرط.
- اختصار التحليل الرسومي إلى أول 100 حرف مع إبقاء النتيجة الكاملة دون تغيير.
- جعل سجل العمليات وصفيًا فقط دون حفظ النصوص أو النتائج أو المفاتيح.
- تنفيذ عمليات التشفير في Worker Thread واحد حتى لا تتجمد واجهة Tkinter.
- إبطال النتائج القديمة عند بدء عملية جديدة أو تبديل الخوارزمية.
- إضافة Cache محدود لمفاتيح جولات DES ونتيجة DH التعليمية المتكررة.
- فصل صفحة التحليل الرسومي ومساعداتها في
ui/analysis_view.pyعبرAnalysisViewMixin. - فصل إنشاء وقراءة حقول المفاتيح في
ui/key_fields.pyعبرKeyFieldsMixin. - فصل تبويب شرح الكود وتلوينه في
ui/code_view.pyعبرCodeViewMixin. - فصل بناء تبويب التشفير في
ui/crypto_view.pyعبرCryptoViewMixin. - فصل بناء الشريط الجانبي في
ui/sidebar_view.pyعبرSidebarViewMixin. - إزالة نسخ الواجهة الاحتياطية المكررة من
main.pyوالاعتماد على وحداتuiالرسمية. - إضافة Benchmark قابل لإعادة التشغيل في
tools/benchmark.py. - التحقق من أداء الخوارزميات الأساسية ومدخلات DES وS-DES الصحيحة.
- إنشاء
core/registry.pyكسجل مركزي لأسماء الخوارزميات وتصنيفاتها وحقولها. - ربط طبقة الخدمة بالـ Registry بدل شروط أسماء الخوارزميات المتفرقة.
- جعل حقول المفاتيح وقائمة الخوارزميات والاختبار السريع تُبنى من تعريف Registry.
- إضافة اختبارات Registry، ليصبح إجمالي الاختبارات 32 اختبارًا.
- استخراج
AppStateمن نافذة Tkinter مع إبقاء خصائص التوافق للـ Mixins. - استخراج
CryptoControllerلإدارة Worker وQueue والإلغاء ودورة حياة العملية. - منع Mixins من امتلاك دورة حياة Worker مباشرة، مع إبقاء واجهة
CryptoAppالحالية مستقرة. - إضافة اختبارات Controller، ليصبح إجمالي الاختبارات 35 اختبارًا.
- استخراج تعريفات الألوان واختيار الثيمات إلى
ui/theme_manager.py. - جعل تعريفات الثيمات غير قابلة للتعديل من Views أثناء التشغيل.
- إضافة اختبارات ThemeManager، ليصبح إجمالي الاختبارات 38 اختبارًا.
- استخراج اختيار اللغة والنصوص واتجاه RTL إلى
ui/language_manager.py. - منع Views من الوصول المباشر إلى قاموس
TRANSLATIONS. - توحيد
localizeوbidiعبر LanguageManager للنصوص الديناميكية. - إضافة اختبارات LanguageManager، ليصبح إجمالي الاختبارات 42 اختبارًا.
هذه الخطة هي نقطة البداية لإعادة بناء المشروع ورفعه من نموذج متوسط إلى مشروع أكثر احترافية.
هذه العناصر تؤثر في صحة النتائج واستقرار التطبيق ويجب معالجتها أولًا:
- منع Vigenère من الانهيار عند ترك المفتاح فارغًا.
- التحقق من نوع ومحتوى مفاتيح Vigenère.
- تنظيف مدخلات Playfair والتحقق من الرموز غير المدعومة.
- منع Hill من استقبال مفاتيح ناقصة أو نصوص غير مناسبة.
- إضافة تحقق صحيح لقيم Diffie-Hellman السالبة والصفرية.
- إضافة تحقق أقوى لقيم RSA، مع توضيح حدود RSA التعليمي.
- معالجة الأحرف غير الإنجليزية بدل تحويلها إلى نتائج خاطئة بصمت.
- منع أخطاء الواجهة الناتجة عن الإدخال غير الصحيح وإظهار رسائل مفهومة.
هذه العناصر تحسن قابلية الصيانة وتجربة المستخدم:
- تقسيم
main.pyإلى وحدات مستقلة. - نقل الخوارزميات إلى ملفات متخصصة.
- فصل منطق التحليل عن منطق التشفير.
- توحيد التحقق من المفاتيح في طبقة واحدة.
- إزالة
except Exceptionالواسعة أو استبدالها بمعالجة محددة. - توحيد النصوص المترجمة بدل وجود نصوص ثابتة داخل
main.py. - مراجعة أمثلة الشرح للتأكد من تطابقها مع النتائج الفعلية.
- تحسين واجهة RTL والعرض المختلط بين العربية والإنجليزية.
- تحسين إدارة سجل العمليات وحفظه عند الحاجة.
هذه العناصر لا تمنع الاستخدام الأساسي، لكنها ترفع جودة المشروع:
- إزالة ملفات
.pycالمتتبعة في Git. - إزالة المسار المتداخل أو الـ submodule غير المكتمل.
- حذف أو إعادة تنظيم ملفات
fix_*.pyالمؤقتة. - إضافة صور ولقطات شاشة للتوثيق.
- إضافة اختبارات أداء للخوارزميات والتحليل البصري.
- إضافة إعدادات تنسيق وفحص للكود.
- إضافة ترخيص واضح للمشروع.
- إضافة نظام إصدارات وملف
CHANGELOG.md. - إضافة قوالب Issues وPull Requests.
يحتوي core/registry.py على تعريف AlgorithmSpec لكل خوارزمية، ويحدد:
- الاسم والترتيب الظاهر في الواجهة.
- بادئة دوال
CryptoCore. - تصنيف الخوارزمية.
- حقول المفاتيح وأنواعها وقيمها الافتراضية وأحجامها.
- حد النص، وتطبيع النصوص الثنائية، وتمرير اللغة عند الحاجة.
- نص Quick Test الافتراضي.
لإضافة خوارزمية جديدة مستقبلًا، يبدأ التغيير بإضافة AlgorithmSpec جديد بعد تنفيذ دوال التشفير وفك التشفير في CryptoCore، ثم إضافة الترجمة والشرح والتحليل عند الحاجة. ستظهر الخوارزمية تلقائيًا في قائمة التطبيق وحقول المفاتيح وQuick Test وطبقة الخدمة، مع بقاء الاختبارات هي بوابة التحقق من اكتمال التعريف.
- أصبح
main.pyأصغر بعد إزالة تعريفات fallback المكررة، مع إبقاءAppSizesوStatusBarمن وحداتهما الرسمية. - تم الحفاظ على Cache الخاص بمفاتيح DES ونتيجة Diffie-Hellman، مع استمرار اختبارات Cache الحالية.
- نجح بناء PyInstaller باستخدام
CryptoEdu.spec، وبدأت النسخة التنفيذية تحت Xvfb دون أخطاء مباشرة. - يمكن تشغيل قياس الأداء محليًا باستخدام:
python tools/benchmark.py
python tools/benchmark.py --repeats 300 --case DESالأداة تقريرية ولا تفشل البناء بسبب اختلاف سرعة الأجهزة أو حمل المعالج.
- تم إعداد
pyproject.tomlبقواعد Ruff واكتشاف الاختبارات وبيانات الحزمة. - أصبح فحص Ruff يمر بنجاح، مع إصلاح استيرادات ومتغيرات غير مستخدمة واكتشاف استخدام غير معرّف لـ
Tفي مسار تحليل RSA. - تمت إضافة
tests/test_ui_smoke.py؛ يعمل عبر Xvfb ويتخطى نفسه تلقائيًا عند غيابDISPLAY. - تمت إضافة
.github/workflows/ci.ymlلفحص Ruff والاختبارات والبناء عبر PyInstaller. - تمت إضافة
CHANGELOG.mdوLICENSEبترخيص MIT. - نُقلت سكربتات الإصلاح التاريخية إلى
tools/legacy/، وأصبحتtools/benchmark.pyأداة التشغيل الأساسية للقياس.
سيتم بناء مجموعة اختبارات مستقلة تغطي:
- التشفير ثم فك التشفير لكل خوارزمية.
- أمثلة معيارية معروفة مثل DES وVigenère.
- المفاتيح الفارغة والناقصة وغير الصحيحة.
- النصوص العربية والإنجليزية والنصوص المختلطة.
- الرموز وعلامات الترقيم.
- الحدود الرياضية الخاصة بـ RSA وDiffie-Hellman وHill.
- تشغيل الواجهة وتغيير اللغة والثيم والخوارزمية.
الهدف هو أن يصبح تشغيل الاختبارات جزءًا ثابتًا من كل تعديل:
python -m unittest discover -s tests -v
ruff check .
python -m compileall -q .يتضمن المستودع أيضًا سير عمل GitHub Actions في .github/workflows/ci.yml، ويشغل فحص Ruff والاختبارات واختبار الواجهة عبر Xvfb ثم يتحقق من بناء PyInstaller.
لتشغيل اختبار الواجهة محليًا على Linux:
xvfb-run --auto-servernum python -m unittest tests.test_ui_smoke -vالمشروع في مرحلة تطوير وتحسين مستمر. عند إضافة تعديل جديد يفضل اتباع الخطوات التالية:
- إنشاء Branch مستقل.
- وصف المشكلة أو الفكرة بوضوح.
- إضافة اختبار للحالة الجديدة إن أمكن.
- اختبار الواجهة والخوارزمية يدويًا.
- التأكد من عدم إضافة ملفات بناء أو Cache إلى Git.
- كتابة Commit واضح ومحدد.
المشروع مرخص بموجب MIT License. راجع ملف LICENSE للتفاصيل.
Mr. Kaido
مشروع تعليمي مفتوح للتطوير بهدف تبسيط مفاهيم التشفير وتحويلها إلى تجربة عملية وتفاعلية.
CryptoEdu Pro — Learn the algorithm, understand the process.