एफाइन सिफर का कार्यान्वयन बनाइए। यह मध्य पूर्व में बनी एक प्राचीन एन्क्रिप्शन प्रणाली है।
एफाइन सिफर एक तरह का मोनोअल्फाबेटिक सब्स्टिट्यूशन सिफर है। इसमें हर अक्षर को उसके संख्यात्मक रूप में बदला जाता है, फिर एक गणितीय फंक्शन की मदद से एन्क्रिप्ट किया जाता है, और अंत में उसे उसकी नई संख्या से जुड़े अक्षर में बदल दिया जाता है। हालाँकि सभी मोनोअल्फाबेटिक सिफर कमज़ोर होते हैं, एफाइन सिफर एटबैश सिफर से कहीं ज़्यादा मज़बूत है, क्योंकि इसमें कुंजियों की संख्या बहुत ज़्यादा होती है।
एन्क्रिप्शन फंक्शन यह है:
E(x) = (ai + b) mod m
जहाँ:
i अक्षर का इंडेक्स है, जो 0 से लेकर वर्णमाला की लंबाई से 1 कम तक होता है।m वर्णमाला की लंबाई है।
लैटिन वर्णमाला के लिए m का मान 26 होता है।a और b पूर्णांक हैं, जो मिलकर एन्क्रिप्शन कुंजी बनाते हैं।स्वचालित डिक्रिप्शन के सफल होने के लिए वैल्यू a और m का सहअभाज्य (या परस्पर अभाज्य) होना ज़रूरी है, यानी उनका एकमात्र सामान्य गुणनखंड संख्या 1 हो (अधिक जानकारी सहअभाज्य पूर्णांकों वाले विकिपीडिया लेख में मिल सकती है)।
अगर a, m के साथ सहअभाज्य नहीं है, तो आपके प्रोग्राम को बताना चाहिए कि यह एक एरर है।
वरना उसे दी गई कुंजी से एन्क्रिप्ट या डिक्रिप्ट करना चाहिए।
इस अभ्यास के उद्देश्य से, अंक मान्य इनपुट हैं, लेकिन उन्हें एन्क्रिप्ट नहीं किया जाता।
स्पेस और विराम चिह्न को छोड़ दिया जाता है।
सिफरटेक्स्ट को एक निश्चित लंबाई के समूहों में लिखा जाता है, जिन्हें स्पेस से अलग किया जाता है। पारंपरिक समूह आकार 5 अक्षरों का होता है।
ऐसा इसलिए किया जाता है ताकि शब्दों की सीमाओं के आधार पर एन्क्रिप्ट किए गए टेक्स्ट का अनुमान लगाना मुश्किल हो जाए।
डिक्रिप्शन फंक्शन यह है:
D(y) = (a^-1)(y - b) mod m
जहाँ:
y एन्क्रिप्ट किए गए अक्षर की संख्यात्मक वैल्यू है, यानी y = E(x)
a^-1, a mod m का मॉड्यूलर मल्टीप्लिकेटिव इनवर्स (MMI) हैa और m सहअभाज्य हों।a का MMI वह x होता है जिसके लिए ax को m से भाग देने पर शेषफल 1 आता है:
ax mod m = 1
मॉड्यूलर मल्टीप्लिकेटिव इनवर्स कैसे निकाला जाए और उसका मतलब क्या है, इस बारे में अधिक जानकारी संबंधित विकिपीडिया लेख में मिल सकती है।
a = 5, b = 7 के साथ "test" को एन्क्रिप्ट करने पर "ybty" मिलता हैa = 5, b = 7 के साथ "ybty" को डिक्रिप्ट करने पर "test" मिलता हैa = 11, b = 7 के साथ "ybty" को डिक्रिप्ट करने पर "lqul" मिलता हैa = 19, b = 13 के साथ "kqlfd jzvgy tpaet icdhm rtwly kqlon ubstx" को डिक्रिप्ट करने पर "thequickbrownfoxjumpsoverthelazydog" मिलता हैa = 18, b = 13 के साथ "test" को एन्क्रिप्ट करना एक एरर है, क्योंकि 18 और 26 सहअभाज्य नहीं हैंa = 15 के लिए MMI निकालना:
(15 * x) mod 26 = 1(15 * 7) mod 26 = 1, यानी 105 mod 26 = 1
7, 15 mod 26 का MMI हैExercism पर साइन अप कीजिए और Lean को 100 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।