المسارات
/
Scheme
Scheme
/
التمارين
/
الشفرة الأفينية
الشفرة الأفينية

الشفرة الأفينية

متوسط

التعليمات

أنشئ تطبيقًا لشفرة أفين، وهو نظام تشفير قديم نشأ في الشرق الأوسط.

شفرة أفين نوع من شفرات الاستبدال أحادية الأبجدية. يُقابَل كل حرف بما يعادله رقميًا، ثم يُشفَّر باستخدام دالة رياضية، ثم يُحوَّل إلى الحرف المرتبط بقيمته الرقمية الجديدة. وعلى الرغم من أن جميع الشفرات أحادية الأبجدية ضعيفة، فإن شفرة أفين أقوى بكثير من شفرة أتباش، لأنها تمتلك مفاتيح أكثر بكثير.

التشفير

دالة التشفير هي:

E(x) = (ai + b) mod m

حيث:

  • i هو فهرس الحرف من 0 إلى طول الأبجدية ناقص 1.
  • m هو طول الأبجدية. وبالنسبة إلى الأبجدية الرومانية، فإن قيمة m هي 26.
  • a و b عددان صحيحان يشكّلان مفتاح التشفير.

يجب أن تكون القيمتان a و m أوليتين فيما بينهما (أو، أوليتين بالنسبة إلى بعضهما) حتى ينجح فك التشفير التلقائي، أي أن العدد 1 هو العامل المشترك الوحيد بينهما (يمكن العثور على مزيد من المعلومات في مقالة ويكيبيديا عن الأعداد الأولية فيما بينها). وإذا لم تكن a أولية بالنسبة إلى m، فعلى برنامجك أن يشير إلى أن هذا خطأ. وإلا فعليه أن يشفّر أو يفكّ التشفير باستخدام المفتاح المقدَّم.

لغرض هذا التمرين، الأرقام مدخلات صالحة لكنها لا تُشفَّر. أما المسافات وعلامات الترقيم فمستبعدة. ويُكتب النص المشفَّر في مجموعات ذات طول ثابت تفصل بينها مسافة، وحجم المجموعة التقليدي هو 5 أحرف. والغرض من ذلك هو جعل تخمين النص المشفَّر بناءً على حدود الكلمات أكثر صعوبة.

فك التشفير

دالة فك التشفير هي:

D(y) = (a^-1)(y - b) mod m

حيث:

  • y هي القيمة الرقمية لحرف مشفَّر، أي y = E(x)
  • من المهم ملاحظة أن a^-1 هي المعكوس الضربي النمطي (MMI) للعدد a mod m
  • ولا يوجد المعكوس الضربي النمطي إلا إذا كانت a و m أوليتين فيما بينهما.

المعكوس الضربي النمطي للعدد a هو x بحيث يكون الباقي بعد قسمة ax على m هو 1:

ax mod m = 1

يمكن العثور على مزيد من المعلومات حول كيفية إيجاد المعكوس الضربي النمطي ومعناه في مقالة ويكيبيديا ذات الصلة.

أمثلة عامة

  • تشفير "test" يعطي "ybty" باستخدام المفتاح a = 5، b = 7
  • فك تشفير "ybty" يعطي "test" باستخدام المفتاح a = 5، b = 7
  • فك تشفير "ybty" يعطي "lqul" باستخدام مفتاح خاطئ a = 11، b = 7
  • فك تشفير "kqlfd jzvgy tpaet icdhm rtwly kqlon ubstx" يعطي "thequickbrownfoxjumpsoverthelazydog" باستخدام المفتاح a = 19، b = 13
  • تشفير "test" باستخدام المفتاح a = 18، b = 13 خطأ لأن العددين 18 و 26 ليسا أوليين فيما بينهما

مثال على إيجاد المعكوس الضربي النمطي (MMI)

إيجاد المعكوس الضربي النمطي للعدد a = 15:

  • (15 * x) mod 26 = 1
  • (15 * 7) mod 26 = 1، أي 105 mod 26 = 1
  • 7 هو المعكوس الضربي النمطي للعدد 15 mod 26

المصدر

ويكيبيديايفتح الرابط في نافذة أو علامة تبويب جديدة
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Scheme Exercism

مستعد لبدء الشفرة الأفينية؟

سجّل في Exercism لتتعلّم وتتقن Scheme عبر 39 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.