एटबैश सिफर का एक कार्यान्वयन बनाइए। यह मध्य पूर्व में बनी एन्क्रिप्शन की एक प्राचीन प्रणाली है।
एटबैश सिफर एक सरल सबस्टिट्यूशन सिफर है। इसमें वर्णमाला के सारे अक्षरों का क्रम उलट दिया जाता है, जिससे बनने वाली वर्णमाला उलटे क्रम की हो जाती है। पहले अक्षर की जगह अंतिम अक्षर रखा जाता है, दूसरे की जगह अंत से दूसरा अक्षर, और इसी तरह आगे भी।
लैटिन वर्णमाला के लिए एटबैश सिफर ऐसा होगा:
Plain: abcdefghijklmnopqrstuvwxyz
Cipher: zyxwvutsrqponmlkjihgfedcba
यह बहुत कमज़ोर सिफर है, क्योंकि इसमें सिर्फ एक ही संभावित कुंजी होती है, और यह एक सरल मोनो-अल्फाबेटिक सबस्टिट्यूशन सिफर है। हालाँकि जब यह सिफर बना था, तब शायद यह कोई समस्या नहीं थी।
सिफरटेक्स्ट को तय लंबाई के समूहों में लिखा जाता है, और परंपरागत समूह का आकार 5 अक्षर होता है। संख्याएँ जैसी हैं वैसी ही रहती हैं, और विराम चिह्न हटा दिए जाते हैं। ऐसा इसलिए किया जाता है ताकि शब्दों की सीमाओं के आधार पर अनुमान लगाना कठिन हो जाए। सारा टेक्स्ट छोटे अक्षरों में एन्कोड किया जाएगा।
test को एन्कोड करने पर gvhg मिलता हैx123 yes को एन्कोड करने पर c123b vh मिलता हैgvhg को डिकोड करने पर test मिलता हैgsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt को डिकोड करने पर thequickbrownfoxjumpsoverthelazydog मिलता हैआपको decode और encode फंक्शन बनाने हैं, जो Atbash सिफर का उपयोग करके String को डिकोड और एनकोड करते हैं।
अगर आपको टाइप को लेकर संदेह है, तो आप दिए गए सिग्नेचर का उपयोग कर सकते हैं, लेकिन यह आपकी रचनात्मकता को सीमित न करे।
यह अभ्यास टेक्स्ट डेटा के साथ काम करता है। ऐतिहासिक कारणों से Haskell का
String टाइप [Char] का समानार्थी है, यानी अक्षरों का एक ऐरे। टेक्स्ट डेटा को और अधिक
कुशलता से संभालने के लिए Text टाइप का उपयोग किया जा सकता है।
इस अभ्यास के लिए एक वैकल्पिक विस्तार के रूप में, आप यह कर सकते हैं:
- text जोड़िए।Data.Text इंपोर्ट कीजिए:import qualified Data.Text as T
import Data.Text (Text)
Text टाइप का उपयोग कीजिए, जैसे decode :: Text -> Text, और
Data.Text कॉम्बिनेटरों को जैसे T.pack के नाम से इस्तेमाल कीजिए।Data.Text का
डॉक्युमेंटेशन देखिए।String के सभी प्रयोगों को Text से बदल दीजिए, यानी:decode :: Text -> Text
decode cipherText = ...
encode :: Text -> Text
encode plainText = ...
यह हिस्सा पूरी तरह वैकल्पिक है।
Exercism पर साइन अप कीजिए और Haskell को 107 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।