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

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


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

इस क्रिप्टोसिस्टम को आमतौर पर शिफ्ट सिफर के रूप में संदर्भित किया जाता है। अवधारणा प्रत्येक अल्फाबेट को दूसरे अल्फाबेट से बदलना है जो 0 और 25 के बीच कुछ निश्चित संख्या से 'शिफ्ट' किया गया है।

इस प्रकार की योजना के लिए, प्रेषक और प्राप्तकर्ता दोनों अल्फाबेट को शिफ्ट करने के लिए एक 'गुप्त शिफ्ट नंबर' पर सहमत होते हैं। यह संख्या जो 0 और 25 के बीच होती है, एन्क्रिप्शन की कुंजी बन जाती है।

नाम 'सीजर सिफर' का उपयोग कभी-कभी शिफ्ट सिफर का वर्णन करने के लिए किया जाता है जब 'थ्री का शिफ्ट' उपयोग किया जाता है।

प्रक्रिया

  • प्लेनटेक्स्ट अक्षर को एन्क्रिप्ट करने के लिए, प्रेषक स्लाइडिंग रूलर को प्लेनटेक्स्ट अक्षरों के पहले सेट के नीचे रखता है और इसे गुप्त शिफ्ट की संख्या के अनुसार बाईं ओर स्लाइड करता है।
  • प्लेनटेक्स्ट अक्षर को तब स्लाइडिंग रूलर के नीचे सिफरटेक्स्ट अक्षर में एन्क्रिप्ट किया जाता है। इस प्रक्रिया का परिणाम तीन पोजीशन के सहमत शिफ्ट के लिए निम्नलिखित चित्रण में दर्शाया गया है। इस मामले में, प्लेनटेक्स्ट 'tutorial' सिफरटेक्स्ट 'wxwruldo' में एन्क्रिप्ट होता है।

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

  • सिफरटेक्स्ट प्राप्त करने पर, प्राप्तकर्ता जो गुप्त शिफ्ट भी जानता है, अपने स्लाइडिंग रूलर को सिफरटेक्स्ट अल्फाबेट के नीचे रखता है और इसे सहमत शिफ्ट नंबर, इस मामले में 3, के अनुसार दाईं ओर स्लाइड करता है।
  • वह फिर स्लाइडिंग रूलर के नीचे प्लेनटेक्स्ट अक्षर द्वारा सिफरटेक्स्ट अक्षर को प्रतिस्थापित करता है। इसलिए सिफरटेक्स्ट 'wxwruldo' 'tutorial' में डिक्रिप्ट होता है। शिफ्ट 3 के साथ एन्कोडेड संदेश को डिक्रिप्ट करने के लिए, '-3' के शिफ्ट का उपयोग करके प्लेनटेक्स्ट अल्फाबेट जनरेट करें।

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

उपरोक्त प्रक्रिया का C++ में कार्यान्वयन यहां है।

चरण और स्यूडोकोड

संदेश और कुंजी को इनपुट के रूप में लें:

एन्क्रिप्शन के लिए

  • Input: tutorial
  • Output: wxwruldo

डिक्रिप्शन के लिए

  • Input: wxwruldo
  • Output: tutorial

एन्क्रिप्शन के लिए

Begin
    For i = 0 से msg[i] != '\0' तक
        ch = msg[i]
        // लोअरकेस अक्षर के लिए एन्क्रिप्ट
        If (ch >= 'a' and ch <= 'z')
            ch = ch + key
            if (ch > 'z')
                ch = ch - 'z' + 'a' - 1
            done
            msg[i] = ch
        // अपरकेस अक्षर के लिए एन्क्रिप्ट
        else if (ch >= 'A' and ch <= 'Z')
            ch = ch + key
            if (ch > 'Z')
                ch = ch - 'Z' + 'A' - 1
            done
            msg[i] = ch
        done
    done
    एन्क्रिप्टेड मैसेज प्रिंट करें
End

डिक्रिप्शन के लिए

Begin
    For i = 0 से msg[i] != '\0' तक
        ch = msg[i]
        // लोअरकेस अक्षर के लिए डिक्रिप्ट
        if(ch >= 'a' and ch <= 'z')
            ch = ch - key
            if (ch < 'a')
                ch = ch + 'z' - 'a' + 1
            done
            msg[i] = ch
        // अपरकेस अक्षर के लिए डिक्रिप्ट
        else if (ch >= 'A' and ch <= 'Z')
            ch = ch - key
            if (ch < 'A')
                ch = ch + 'Z' - 'A' + 1
            done
            msg[i] = ch
        done
    done
    डिक्रिप्टेड मैसेज प्रिंट करें
End

उदाहरण

#include <iostream>
#include <string.h>
using namespace std;

int main() {
    cout << "Enter the message:\n";
    char msg[100];
    cin.getline(msg, 100); // संदेश को इनपुट के रूप में लें
    
    int i, j, length, choice, key;
    cout << "Enter key: ";
    cin >> key; // कुंजी को इनपुट के रूप में लें
    
    length = strlen(msg);
    cout << "Enter your choice \n1. Encryption \n2. Decryption \n";
    cin >> choice;
    
    if (choice == 1) { // एन्क्रिप्शन के लिए
        char ch;
        for(int i = 0; msg[i] != '\0'; ++i) {
            ch = msg[i];
            // लोअरकेस अक्षर के लिए एन्क्रिप्ट
            if (ch >= 'a' && ch <= 'z') {
                ch = ch + key;
                if (ch > 'z') {
                    ch = ch - 'z' + 'a' - 1;
                }
                msg[i] = ch;
            }
            // अपरकेस अक्षर के लिए एन्क्रिप्ट
            else if (ch >= 'A' && ch <= 'Z') {
                ch = ch + key;
                if (ch > 'Z') {
                    ch = ch - 'Z' + 'A' - 1;
                }
                msg[i] = ch;
            }
        }
        printf("Encrypted message: %s", msg);
    }
    else if (choice == 2) { // डिक्रिप्शन के लिए
        char ch;
        for(int i = 0; msg[i] != '\0'; ++i) {
            ch = msg[i];
            // लोअरकेस अक्षर के लिए डिक्रिप्ट
            if(ch >= 'a' && ch <= 'z') {
                ch = ch - key;
                if(ch < 'a') {
                    ch = ch + 'z' - 'a' + 1;
                }
                msg[i] = ch;
            }
            // अपरकेस अक्षर के लिए डिक्रिप्ट
            else if(ch >= 'A' && ch <= 'Z') {
                ch = ch - key;
                if(ch < 'A') {
                    ch = ch + 'Z' - 'A' + 1;
                }
                msg[i] = ch;
            }
        }
        cout << "Decrypted message: " << msg;
    }
    return 0;
}

आउटपुट

एन्क्रिप्शन के लिए:
Enter the message: tutorial
Enter key: 3
Enter your choice
1. Encryption
2. Decryption
1
Encrypted message: wxwruldo

डिक्रिप्शन के लिए:
Enter the message: wxwruldo
Enter key: 3
Enter your choice
1. Encryption
2. Decryption
2
Decrypted message: tutorial

सीजर सिफर सबसे सरल और सबसे पुराने एन्क्रिप्शन तकनीकों में से एक है। यह केवल 25 संभावित कुंजियों (1-25 शिफ्ट) के साथ ब्रूट-फोर्स अटैक के प्रति बेहद संवेदनशील है। यह आधुनिक उपयोग के लिए सुरक्षित नहीं है लेकिन क्रिप्टोग्राफी की मूल अवधारणाओं को समझने के लिए उत्कृष्ट है।

  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

  1. C++ प्रोग्राम: एडजेसेंसी मैट्रिक्स इम्प्लीमेंट करना C++ प्रोग्राम: एडजेसेंसी मैट्रिक्स इम्प्लीमेंट करना

    एक ग्राफ का एडजेसेंसी मैट्रिक्स V x V आकार का एक वर्ग मैट्रिक्स होता है। V ग्राफ G के वर्टेक्स की संख्या है। इस मैट्रिक्स में प्रत्येक तरफ V वर्टेक्स मार्क किए जाते हैं। यदि ग्राफ में i से j वर्टेक्स तक कुछ एज हैं, तो एडजेसेंसी मैट्रिक्स में i-वीं पंक्ति और j-वें कॉलम में 1 होगा (या वेटेड ग्राफ के