सरल सिफर

सरल सिफर

मध्यम

निर्देश

सीज़र जैसा एक सरल शिफ्ट सिफर और एक ज़्यादा सुरक्षित प्रतिस्थापन सिफर बनाइए।

चरण 1

"अगर उसके पास कहने के लिए कुछ गोपनीय होता, तो वह उसे सिफर में लिखता, यानी वर्णमाला के अक्षरों का क्रम इस तरह बदल देता कि कोई भी शब्द समझा न जा सके। अगर कोई इन्हें डिसाइफर करना चाहे और इनका अर्थ निकालना चाहे, तो उसे वर्णमाला के चौथे अक्षर, यानी D, को A की जगह रखना होगा, और इसी तरह बाकी के साथ।" सुएटोनियस, जूलियस सीज़र का जीवन

सिफर बहुत सीधे-सादे एल्गोरिदम हैं, जो टेक्स्ट को कम पठनीय बना देते हैं, लेकिन फिर भी उसे आसानी से डिसाइफर किया जा सकता है। ये कई तरह के क्रिप्टैनालिसिस के प्रति संवेदनशील होते हैं, लेकिन सीज़र भाग्यशाली था कि उसके दुश्मन क्रिप्टैनालिस्ट नहीं थे।

जूलियस सीज़र के कुछ संदेशों के लिए सीज़र सिफर इस्तेमाल किया गया था, जो दूर भेजे गए थे। अब सीज़र जानता था कि यह सिफर बहुत अच्छा नहीं था, लेकिन इस मामले में उसका एक साथी था: लगभग कोई भी अच्छी तरह पढ़ नहीं सकता था। इसलिए कुछ अक्षर इधर-उधर होना ही काफ़ी था, ताकि लोग उन थोड़े-से शब्दों को भी न पहचान सकें जो वे जानते थे।

आपको सीज़र सिफर जैसा एक सरल शिफ्ट सिफर बनाना है। यह चित्र सीज़र सिफर का बढ़िया उदाहरण है:

सीज़र सिफर

उदाहरण के लिए:

"iamapandabear" को encode फंक्शन में इनपुट के तौर पर देने पर सिफर "ldpdsdqgdehdu" लौटता है। यह संदेश को रास्ते में गुप्त रखने के लिए काफ़ी अस्पष्ट है।

जब "ldpdsdqgdehdu" को decode फंक्शन में डाला जाता है, तो वह मूल "iamapandabear" लौटाता है, जिससे आपका दोस्त आपका मूल संदेश पढ़ सकता है।

चरण 2

जैसे ही विरोधी कमांडर इन्हें समझ लेता है, शिफ्ट सिफर जल्दी ही बेकार हो जाते हैं। तो चलिए, इसके बजाय एक प्रतिस्थापन सिफर इस्तेमाल करके देखते हैं। कोड को इस तरह बदलकर देखिए कि हम एक की दे सकें और उसे शिफ्ट की दूरी के लिए इस्तेमाल कर सकें।

यहाँ एक उदाहरण है:

की "aaaaaaaaaaaaaaaaaa" देने पर, स्ट्रिंग "iamapandabear" को एनकोड करने से मूल "iamapandabear" ही लौटेगा।

की "ddddddddddddddddd" देने पर, हमारी स्ट्रिंग "iamapandabear" को एनकोड करने से अस्पष्ट "ldpdsdqgdehdu" लौटेगा

ऊपर के उदाहरण में, हमने की वैल्यू के लिए a = 0 रखा है। इसलिए जब प्लेनटेक्स्ट को की में जोड़ा जाता है, तो वही संदेश बाहर आता है। इसलिए "aaaa" आदर्श की नहीं है। लेकिन अगर हम की को "dddd" रखें, तो हमें वही मिलेगा जो सीज़र सिफर में मिलता है।

चरण 3

किसी भी सिफर की सबसे कमज़ोर कड़ी इंसान होता है। चलिए, आपके प्रतिस्थापन सिफर को थोड़ा और फॉल्ट टॉलरेंट बनाते हैं। इसके लिए हम रैंडमनेस का एक स्रोत देंगे और यह सुनिश्चित करेंगे कि की में केवल छोटे अक्षर हों।

अगर कोई की बिल्कुल भी न दे, तो कम से कम 100 छोटे अक्षरों की लंबाई वाली एक वास्तविक रैंडम की बनाइए।

विस्तार

शिफ्ट सिफर टेक्स्ट को थोड़ा अजीब बनाकर काम करते हैं, लेकिन फ्रीक्वेंसी एनालिसिस के प्रति संवेदनशील होते हैं। प्रतिस्थापन सिफर इसमें मदद करते हैं, लेकिन जब की छोटी हो या स्पेस बरकरार रहें, तो वे अब भी बहुत संवेदनशील होते हैं। आगे आप इस समस्या का एक हल "क्रिप्टो-स्क्वेयर" अभ्यास में देखेंगे।

अगर आप इस क्षेत्र में और आगे जाना चाहते हैं, तो सवाल यह होने लगते हैं कि हम की का आदान-प्रदान सुरक्षित तरीके से कैसे करें। इस योजना के शुरुआती कार्यान्वयनों में से एक के लिए विकिपीडिया पर Diffie-Hellman देखिए।

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

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

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