Atbash सिफर

Atbash सिफर

मध्यम

निर्देश

एटबैश सिफर का एक कार्यान्वयन बनाइए। यह मध्य पूर्व में बनी एन्क्रिप्शन की एक प्राचीन प्रणाली है।

एटबैश सिफर एक सरल सबस्टिट्यूशन सिफर है। इसमें वर्णमाला के सारे अक्षरों का क्रम उलट दिया जाता है, जिससे बनने वाली वर्णमाला उलटे क्रम की हो जाती है। पहले अक्षर की जगह अंतिम अक्षर रखा जाता है, दूसरे की जगह अंत से दूसरा अक्षर, और इसी तरह आगे भी।

लैटिन वर्णमाला के लिए एटबैश सिफर ऐसा होगा:

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 टाइप का उपयोग किया जा सकता है।

इस अभ्यास के लिए एक वैकल्पिक विस्तार के रूप में, आप यह कर सकते हैं:

  • Haskell में स्ट्रिंग टाइप के बारे में पढ़िए।
  • package.yaml में अपनी डिपेंडेंसी की सूची में - text जोड़िए।
  • इस तरीके से Data.Text इंपोर्ट कीजिए:
import qualified Data.Text as T
import           Data.Text (Text)
  • Text टाइप का उपयोग कीजिए, जैसे decode :: Text -> Text, और Data.Text कॉम्बिनेटरों को जैसे T.pack के नाम से इस्तेमाल कीजिए।
  • Data.Text का डॉक्युमेंटेशन देखिए।
  • Atbash.hs में String के सभी प्रयोगों को Text से बदल दीजिए, यानी:
decode :: Text -> Text
decode cipherText = ...

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

यह हिस्सा पूरी तरह वैकल्पिक है।


स्रोत

Wikipediaयह लिंक एक नई विंडो या टैब में खुलता है
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Haskell Exercism

Atbash सिफर शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और Haskell को 107 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।