Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में विग्नेरे सिफर (Vigenere Cipher) का कार्यान्वयन


विग्नेरे सिफर अल्फाबेटिक टेक्स्ट को एन्क्रिप्ट करने की एक प्रकार की पॉलीअल्फाबेटिक सब्स्टीट्यूशन विधि है।

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

C++ में विग्नेरे सिफर (Vigenere Cipher) का कार्यान्वयन

एन्क्रिप्शन

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

विग्नेरे सिफर सीजर सिफर से अधिक सुरक्षित है क्योंकि यह एकाधिक सिफर अल्फाबेट्स का उपयोग करता है। हालांकि, यह अभी भी कासिस्की परीक्षा और फ्रीक्वेंसी एनालिसिस के प्रति संवेदनशील है। कुंजी को गुप्त रखा जाना चाहिए और सुरक्षा के लिए यादृच्छिक रूप से चुना जाना चाहिए।

  1. C++ में सीजर सिफर (Caesar Cipher) का कार्यान्वयन C++ में सीजर सिफर (Caesar Cipher) का कार्यान्वयन

    यह एक मोनो-अल्फाबेटिक सिफर है जिसमें प्लेनटेक्स्ट के प्रत्येक अक्षर को दूसरे अक्षर द्वारा प्रतिस्थापित किया जाता है ताकि सिफरटेक्स्ट बन सके। यह सब्स्टीट्यूशन सिफर योजना का सबसे सरल रूप है। इस क्रिप्टोसिस्टम को आमतौर पर शिफ्ट सिफर के रूप में संदर्भित किया जाता है। अवधारणा प्रत्येक अल्फाबेट को दूसरे

  1. C++ में AVL ट्री को लागू करना C++ में AVL ट्री को लागू करना

    AVL ट्री एक सेल्फ-बैलेंसिंग बाइनरी सर्च ट्री है जहां सभी नोड्स के लिए बाएं और दाएं सबट्री की ऊंचाई का अंतर एक से अधिक नहीं हो सकता।ट्री रोटेशन एक ऑपरेशन है जो AVL ट्री पर एलिमेंट्स के क्रम में हस्तक्षेप किए बिना स्ट्रक्चर को बदलता है। यह ट्री में एक नोड को ऊपर ले जाता है और एक नोड को नीचे। इसका उपयो

  1. C++ STL में Set_Symmetric_Difference का कार्यान्वयन C++ STL में Set_Symmetric_Difference का कार्यान्वयन

    यह C++ प्रोग्राम set_symmetric_difference को लागू करने के लिए है। दो सेट का सिमेट्रिक डिफरेंस उन तत्वों द्वारा बनाया जाता है जो एक सेट में मौजूद होते हैं, लेकिन दूसरे में नहीं। सामान्य सेट ऑपरेशन हैं: Set Union Set Intersection Symmetric Set Difference या Exclusive-OR Set Difference या Subtraction