एफ़िन सिफर में, वर्णमाला के प्रत्येक अक्षर को उसके संख्यात्मक समकक्ष के लिए मैप किया जाता है, यह एक प्रकार का मोनोअल्फाबेटिक प्रतिस्थापन सिफर है। एन्क्रिप्शन एक साधारण गणितीय फ़ंक्शन का उपयोग करके किया जाता है और इसे वापस एक अक्षर में बदल दिया जाता है।
आकार एम के वर्णमाला के अक्षरों को पहले एफ़िन सिफर में 0 … एम -1 श्रेणी में पूर्णांक में मैप किया जाता है,
Affine सिफर के लिए 'कुंजी' में 2 नंबर होते हैं, a और b। a को m से अपेक्षाकृत अभाज्य होने के लिए चुना जाना चाहिए।
एन्क्रिप्शन
पूर्णांक को बदलने के लिए, यह मॉड्यूलर अंकगणित का उपयोग करता है कि प्रत्येक सादा पाठ पत्र एक अन्य पूर्णांक से मेल खाता है जो एक सिफर टेक्स्ट अक्षर से मेल खाता है। एक अक्षर के लिए एन्क्रिप्शन फ़ंक्शन है
E ( x ) = ( a x + b ) mod m modulus m: size of the alphabet a and b: key of the cipher.
डिक्रिप्शन
डिक्रिप्शन में, प्रत्येक सिफर टेक्स्ट अक्षरों को उनके पूर्णांक मानों में परिवर्तित करें। डिक्रिप्शन फ़ंक्शन है
D ( x ) = a^-1 ( x - b ) mod m a^-1 : modular multiplicative inverse of a modulo m. i.e., it satisfies the equation 1 = a^-1 mod m.. को संतुष्ट करता है
इस प्रक्रिया को लागू करने के लिए यहाँ एक C++ प्रोग्राम है।
एल्गोरिदम
Begin Function encryption(string m) for i = 0 to m.length()-1 if(m[i]!=' ') c = c + (char) ((((a * (m[i]-'A') ) + b) % 26) + 'A') else c += m[i] return c End Begin Function decryption(string c) Initialize a_inverse = 0 Initialize flag = 0 For i = 0 to 25 flag = (a * i) % 26 if (flag == 1) a_inverse = i done done For i = 0 to c.length() - 1 if(c[i]!=' ') m = m + (char) (((a_inverse * ((c[i]+'A' - b)) % 26)) + 'A') else m = m+ c[i] done End
उदाहरण
#include<bits/stdc++.h> using namespace std; static int a = 7; static int b = 6; string encryption(string m) { //Cipher Text initially empty string c = ""; for (int i = 0; i < m.length(); i++) { // Avoid space to be encrypted if(m[i]!=' ') // added 'A' to bring it in range of ASCII alphabet [ 65-90 | A-Z ] c = c + (char) ((((a * (m[i]-'A') ) + b) % 26) + 'A'); else //else append space character c += m[i]; } return c; } string decryption(string c) { string m = ""; int a_inverse = 0; int flag = 0; //Find a^-1 (the multiplicative inverse of a //in the group of integers modulo m.) for (int i = 0; i < 26; i++) { flag = (a * i) % 26; //Check if (a * i) % 26 == 1, //then i will be the multiplicative inverse of a if (flag == 1) { a_inverse = i; } } for (int i = 0; i < c.length(); i++) { if(c[i] != ' ') // added 'A' to bring it in range of ASCII alphabet [ 65-90 | A-Z ] m = m + (char) (((a_inverse * ((c[i]+'A' - b)) % 26)) + 'A'); else //else append space character m += c[i]; } return m; } int main(void) { string msg = "TUTORIALSPOINT"; string c = encryption(msg); cout << "Encrypted Message is : " << c<<endl; cout << "Decrypted Message is: " << decryption(c); return 0; }
आउटपुट
Encrypted Message is : JQJAVKGFCHAKTJ Decrypted Message is: TUTORIALSPOINT