یک پیادهسازی از «رمز آتباش» بسازید، یک سیستم رمزنگاری باستانی که در خاورمیانه ابداع شد.
رمز آتباش یک «رمز جانشینی» ساده است که بر جابهجایی همهی حروف الفبا تکیه دارد، بهگونهای که الفبای حاصل وارونه میشود. حرف اول با حرف آخر جایگزین میشود، حرف دوم با حرف یکیبهآخر و به همین ترتیب تا پایان الفبا.
رمز آتباش برای الفبای لاتین به این صورت خواهد بود:
Plain: abcdefghijklmnopqrstuvwxyz
Cipher: zyxwvutsrqponmlkjihgfedcba
این رمز بسیار ضعیف است، چون فقط یک کلید ممکن دارد و یک رمز جانشینی تکالفبایی ساده است. البته این موضوع در زمان ابداع رمز شاید مشکلی به شمار نمیآمد.
متن رمزشده در گروههایی با طول ثابت نوشته میشود؛ اندازهی سنتی هر گروه ۵ حرف است. اعداد بدون تغییر میمانند و نشانهگذاریها حذف میشوند. این کار حدسزدن بر پایهی مرزهای کلمه را سختتر میکند. همهی متن بهصورت حروف کوچک رمزگذاری میشود.
test خروجی gvhg میدهدx123 yes خروجی c123b vh میدهدgvhg خروجی test میدهدgsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt خروجی thequickbrownfoxjumpsoverthelazydog میدهدشما باید توابع decode و encode را پیادهسازی کنید که یک String را با استفاده از رمز آتباش رمزگشایی و رمزگذاری میکنند.
اگر دربارهی نوعها مطمئن نیستید، میتوانید از امضایی که در اختیارتان قرار گرفته استفاده کنید، اما نگذارید خلاقیتتان را محدود کند.
این تمرین با دادههای متنی کار میکند. به دلایل تاریخی، نوع String در Haskell با [Char]، یعنی لیستی از کاراکترها، هممعناست. برای
پردازش کارآمدتر دادههای متنی، میتوان از نوع Text استفاده کرد.
بهعنوان یک بخش اضافی اختیاری در این تمرین، میتوانید
- text را به لیست وابستگیهایتان در package.yaml اضافه کنید.Data.Text را به روش زیر import کنید:import qualified Data.Text as T
import Data.Text (Text)
Text استفاده کنید، مثلاً decode :: Text -> Text، و به
ترکیبکنندههای Data.Text مثلاً بهصورت T.pack ارجاع دهید.Data.Text را ببینید.String را در Atbash.hs با Text جایگزین کنید، یعنی:decode :: Text -> Text
decode cipherText = ...
encode :: Text -> Text
encode plainText = ...
این بخش کاملاً اختیاری است.