Vigenere Cipher, अल्फ़ाबेटिक टेक्स्ट को एन्क्रिप्ट करने की एक तरह की पॉलीअल्फ़ाबेटिक प्रतिस्थापन विधि है।
इस विधि में एन्क्रिप्शन और डिक्रिप्शन के लिए Vigenere Cipher Table का उपयोग किया जाता है जिसमें A से Z तक के अक्षर 26 पंक्तियों में लिखे जाते हैं।
एन्क्रिप्शन
कुंजी: स्वागत है
संदेश: यहिस्टुटोरियल पॉइंट
यहां हमें दी गई कुंजी को तब तक दोहराकर एक कुंजी प्राप्त करनी है जब तक कि इसकी लंबाई मूल संदेश लंबाई के बराबर न हो जाए।
एन्क्रिप्शन के लिए संदेश का पहला अक्षर और कुंजी यानी टी और डब्ल्यू लें। विगेनियर सिफर टेबल में वर्णमाला लें जहां टी पंक्ति और डब्ल्यू कॉलम मेल खाता है यानी पी।
संदेश पाठ में शेष सभी अक्षरों के लिए यही प्रक्रिया दोहराएं।
अंत में, एन्क्रिप्टेड संदेश टेक्स्ट है -
एन्क्रिप्टेड संदेश: PLTUWEXQXZTWMPOTZKBF.
सिफर पाठ नीचे समीकरण द्वारा उत्पन्न किया जा सकता है।
ईआई =(पाई + की) मॉड 26
यहाँ P सादा पाठ है और K कुंजी है।
डिक्रिप्शन
कुंजी: स्वागत है
एन्क्रिप्टेड संदेश: PLTUWEXQXZTWMPOTZKBF
एन्क्रिप्टेड संदेश की जेनरेट की और पहला अक्षर यानी पी और डब्ल्यू लें। विगेनियर सिफर टेबल का विश्लेषण करें, कॉलम डब्ल्यू में वर्णमाला पी देखें, संबंधित पंक्ति मूल संदेश यानी टी का पहला अक्षर होगा।
एन्क्रिप्टेड संदेश में सभी अक्षरों के लिए इस प्रक्रिया को दोहराएं।
मूल संदेश:thisistutorialspoint
इसे निम्न समीकरण द्वारा बीजीय रूप में दर्शाया जा सकता है।
पाई =(ईआई - की + 26) मॉड 26
विगेनियर सिफर को लागू करने के लिए यहाँ एक C++ प्रोग्राम है।
एल्गोरिदम
Begin Function encryption(string t) for i = 0, j = 0 to t.length() - 1 char c = t[i] if (c >= 'a' and c <= 'z') c = c + 'A' - 'a' else if (c < 'A' or c > 'Z') continue output = output + (c + k[j] ) % 26 + 'A' j = (j + 1) % k.length() return output End Begin Function decryption(string t) for i = 0, j = 0 to t.length() - 1 char c = t[i] if (c >= 'a' and c <= 'z') c = c + 'A' - 'a' else if (c < 'A' or c > 'Z') continue output =output + (c - k[j] + 26) % 26 + 'A' j = (j + 1) % k.length() return output End
उदाहरण
#include <iostream> #include <string> using namespace std; class Vig { public: string k; Vig(string k) { for (int i = 0; i < k.size(); ++i) { if (k[i] >= 'A' && k[i] <= 'Z') this->k += k[i]; else if (k[i] >= 'a' && k[i] <= 'z') this->k += k[i] + 'A' - 'a'; } } string encryption(string t) { string output; for (int i = 0, j = 0; i < t.length(); ++i) { char c = t[i]; if (c >= 'a' && c <= 'z') c += 'A' - 'a'; else if (c < 'A' || c > 'Z') continue; output += (c + k[j] - 2 * 'A') % 26 + 'A'; //added 'A' to bring it in range of ASCII alphabet [ 65-90 | A-Z ] j = (j + 1) % k.length(); } return output; } string decryption(string t) { string output; for (int i = 0, j = 0; i < t.length(); ++i) { char c = t[i]; if (c >= 'a' && c <= 'z') c += 'A' - 'a'; else if (c < 'A' || c > 'Z') continue; output += (c - k[j] + 26) % 26 + 'A';//added 'A' to bring it in range of ASCII alphabet [ 65-90 | A-Z ] j = (j + 1) % k.length(); } return output; } }; int main() { Vig v("WELCOME"); string ori ="Thisistutorialspoint"; string encrypt = v.encryption(ori); string decrypt = v.decryption(encrypt); cout << "Original Message: "<<ori<< endl; cout << "Encrypted Message: " << encrypt << endl; cout << "Decrypted Message: " << decrypt << endl; }
आउटपुट
Original Message: Thisistutorialspoint Encrypted Message: PLTUWEXQXZTWMPOTZKBF Decrypted Message: THISISTUTORIALSPOINT