एफाइन सिफर का एक इम्प्लीमेंटेशन बनाइए। एफाइन सिफर मध्य पूर्व में बनी एक प्राचीन एन्क्रिप्शन प्रणाली है।
एफाइन सिफर मोनोअल्फाबेटिक सब्स्टीट्यूशन सिफर का एक प्रकार है। हर अक्षर का एक संख्यात्मक समतुल्य होता है। उसे एक गणितीय फंक्शन से एन्क्रिप्ट किया जाता है और फिर उसके नए संख्यात्मक मान वाले अक्षर में बदल दिया जाता है। सभी मोनोअल्फाबेटिक सिफर कमज़ोर होते हैं, फिर भी एफाइन सिफर अटबाश सिफर से कहीं ज़्यादा मज़बूत है, क्योंकि इसमें कुंजियों की संख्या कहीं ज़्यादा होती है।
एन्क्रिप्शन फंक्शन यह है:
E(x) = (ai + b) mod m
जहाँ:
i अक्षर का इंडेक्स है, जो 0 से लेकर वर्णमाला की लंबाई से एक कम तक होता है।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 है