شفرة أتبش

شفرة أتبش

متوسط

التعليمات

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

شفرة أتباش هي شفرة استبدال بسيطة تعتمد على عكس كل حروف الأبجدية بحيث تصبح الأبجدية الناتجة معكوسة. يُستبدل الحرف الأول بالحرف الأخير، والثاني بثاني الحروف من الآخر، وهكذا.

وتكون شفرة أتباش للأبجدية اللاتينية كما يلي:

Plain:  abcdefghijklmnopqrstuvwxyz
Cipher: zyxwvutsrqponmlkjihgfedcba

إنها شفرة ضعيفة جدًا لأنها تملك مفتاحًا واحدًا ممكنًا فقط، وهي شفرة استبدال أحادية الأبجدية بسيطة. غير أن هذا ربما لم يكن مشكلة في زمن هذه الشفرة.

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

أمثلة

  • تشفير test يعطي gvhg
  • تشفير x123 yes يعطي c123b vh
  • فك تشفير gvhg يعطي test
  • فك تشفير gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt يعطي thequickbrownfoxjumpsoverthelazydog

تلميحات

عليك تنفيذ الدالتين decode وencode، اللتين تفكّان تشفير قيمة من النوع String وتشفّرانها باستخدام شفرة Atbash. يمكنك استخدام التوقيع المرفق إن لم تكن متأكدًا من الأنواع، لكن لا تدعه يقيّد إبداعك.

يعمل هذا التمرين على بيانات نصية. ولأسباب تاريخية، فإن النوع String في Haskell مرادف للنوع [Char]، وهو مصفوفة من المحارف. وللتعامل مع البيانات النصية بكفاءة أكبر، يمكن استخدام النوع Text.

وكامتداد اختياري لهذا التمرين، يمكنك

import qualified Data.Text as T
import           Data.Text (Text)
  • أن تستخدم النوع Text، مثل decode :: Text -> Text، وتشير إلى مُركِّبات Data.Text مثل T.pack.
  • أن تبحث عن توثيق Data.Text.
  • أن تستبدل كل مواضع String بـ Text في Atbash.hs، أي:
decode :: Text -> Text
decode cipherText = ...

encode :: Text -> Text
encode plainText = ...

هذا الجزء اختياري بالكامل.


المصدر

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

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

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