विग्नेरे सिफर अल्फाबेटिक टेक्स्ट को एन्क्रिप्ट करने की एक प्रकार की पॉलीअल्फाबेटिक सब्स्टीट्यूशन विधि है।
विग्नेरे सिफर टेबल का उपयोग किया जाता है जिसमें A से Z तक के अल्फाबेट्स 26 पंक्तियों में लिखे होते हैं, इस विधि में एन्क्रिप्शन और डिक्रिप्शन के लिए।

एन्क्रिप्शन
Key: WELCOME
Message: Thisistutorialspoint
यहां हमें दी गई कुंजी को तब तक दोहराकर एक कुंजी प्राप्त करनी होगी जब तक इसकी लंबाई मूल संदेश की लंबाई के बराबर न हो जाए।
एन्क्रिप्शन के लिए संदेश और कुंजी का पहला अक्षर लें यानी T और W। विग्नेरे सिफर टेबल में उस अल्फाबेट को लें जहां T पंक्ति और W कॉलम मेल खाते हैं यानी P।
संदेश टेक्स्ट में शेष सभी अल्फाबेट्स के लिए वही प्रक्रिया दोहराएं।
अंत में, एन्क्रिप्टेड संदेश टेक्स्ट है:
Encrypted Message: PLTUWEXQXZTWMPOTZKBF
सिफर टेक्स्ट नीचे दिए गए समीकरण द्वारा जनरेट किया जा सकता है:
Ei = (Pi + Ki) mod 26
यहां P प्लेन टेक्स्ट है और K कुंजी है।
डिक्रिप्शन
Key: WELCOME
Encrypted Message: PLTUWEXQXZTWMPOTZKBF
जनरेटेड कुंजी और एन्क्रिप्टेड संदेश का पहला अल्फाबेट लें यानी P और W। विग्नेरे सिफर टेबल का विश्लेषण करें, कॉलम W में अल्फाबेट P देखें, संबंधित पंक्ति मूल संदेश का पहला अल्फाबेट होगी यानी T।
एन्क्रिप्टेड संदेश में सभी अल्फाबेट्स के लिए इस प्रक्रिया को दोहराएं।
Original Message: Thisistutorialspoint
इसे बीजगणितीय रूप में निम्न समीकरण द्वारा दर्शाया जा सकता है:
Pi = (Ei - Ki + 26) mod 26
यहां विग्नेरे सिफर को कार्यान्वित करने के लिए एक C++ प्रोग्राम है।
एल्गोरिदम
Begin
Function encryption(string t)
for i = 0, j = 0 से 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
Function decryption(string t)
for i = 0, j = 0 से 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
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'; // 'A' जोड़ा ताकि ASCII वर्णमाला रेंज [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'; // 'A' जोड़ा ताकि ASCII वर्णमाला रेंज [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;
return 0;
}
आउटपुट
Original Message: Thisistutorialspoint Encrypted Message: PLTUWEXQXZTWMPOTZKBF Decrypted Message: THISISTUTORIALSPOINT
विग्नेरे सिफर सीजर सिफर से अधिक सुरक्षित है क्योंकि यह एकाधिक सिफर अल्फाबेट्स का उपयोग करता है। हालांकि, यह अभी भी कासिस्की परीक्षा और फ्रीक्वेंसी एनालिसिस के प्रति संवेदनशील है। कुंजी को गुप्त रखा जाना चाहिए और सुरक्षा के लिए यादृच्छिक रूप से चुना जाना चाहिए।