কম্পিউটার টিউটোরিয়াল

C++-এ সিজার সাইফার (Caesar Cipher) ইমপ্লিমেন্টেশন


এটি একটি মোনো-আলফাবেটিক সাইফার (mono-alphabetic cipher) যেখানে প্লেইনটেক্সটের প্রতিটি অক্ষর অন্য একটি অক্ষর দ্বারা সাবস্টিটিউট (substituted) হয় সাইফারটেক্সট (ciphertext) ফর্ম করতে। এটি সাবস্টিটিউশন সাইফার স্কিমের সবচেয়ে সহজ রূপ।

এই ক্রিপ্টোসিস্টেমকে সাধারণত শিফট সাইফার (Shift Cipher) বলা হয়। কনসেপ্ট হলো প্রতিটি অ্যালফাবেটকে অন্য একটি অ্যালফাবেট দিয়ে রিপ্লেস করা যা ০ থেকে ২৫ পর্যন্ত একটি নির্দিষ্ট সংখ্যা만큼 'শিফট' (shifted) হয়েছে।

এই স্কিমের জন্য সেন্ডার এবং রিসিভার উভয়েই একটি 'সিক্রেট শিফট নম্বর' (secret shift number) নিয়ে একমত হন। এই নম্বর (০ থেকে ২৫ এর মধ্যে) এনক্রিপশনের কী (key) হয়।

'সিজার সাইফার' (Caesar Cipher) নামটি কখনো কখনো শিফট সাইফারকে বোঝাতে ব্যবহৃত হয় যখন 'শিফট অফ থ্রি' (shift of three) ব্যবহার করা হয়।

প্রসেস (Process)

  • একটি প্লেইনটেক্স্ট লেটার এনক্রিপ্ট করতে, সেন্ডার স্লাইডিং রুলার (sliding ruler) কে প্লেইনটেক্স্ট লেটারসেটের নিচে রাখে এবং সিক্রেট শিফটের পরিমাণ만큼 বামে (LEFT) স্লাইড করে।

  • প্লেইনটেক্স্ট লেটারটি স্লাইডিং রুলারের নিচে থাকা সাইফারটেক্স্ট লেটারে এনক্রিপ্ট হয়। এগ্রিদ শিফট ৩ হলে ফলাফল নিচের চিত্রে দেখানো হয়েছে। এই কেসে প্লেইনটেক্স্ট 'tutorial' এনক্রিপ্ট হয়ে 'wxwruldo' হয়। শিফট ৩-এর জন্য সাইফারটেক্স্ট অ্যালফাবেট:

C++-এ সিজার সাইফার (Caesar Cipher) ইমপ্লিমেন্টেশন

  • সাইফারটেক্সট পাওয়ার পর রিসিভার (যে সিক্রেট শিফটও জানে) তার স্লাইডিং রুলার সাইফারটেক্স্ট অ্যালফাবেটের নিচে রাখে এবং একমত শিফট নম্বর (এখানে ৩) 만큼 ডানে (RIGHT) স্লাইড করে।

  • তারপর সাইফারটেক্স্ট লেটারকে স্লাইডিং রুলারের নিচের প্লেইনটেক্স্ট লেটার দিয়ে রিপ্লেস করে। такимভাবে 'wxwruldo' ডিক্রিপ্ট হয়ে 'tutorial' হয়। শিফট ৩ দিয়ে এনকোডেড মেসেজ ডিক্রিপ্ট করতে ' -3 ' শিফট দিয়ে প্লেইনটেক্স্ট অ্যালফাবেট জেনারেট করতে হয়:

C++-এ সিজার সাইফার (Caesar Cipher) ইমপ্লিমেন্টেশন

উপরোক্ত প্রসেসের C++ ইমপ্লিমেন্টেশন নিচে দেওয়া হলো।

স্টেপস ও সিউডোকোড

মেসেজ এবং কী ইনপুট নিন:

এনক্রিপশনের জন্য

  • ইনপুট: tutorial
  • আউটপুট: wxwruldo

ডিক্রিপশনের জন্য

  • ইনপুট: wxwruldo
  • আউটপুট: tutorial

এনক্রিপশন সিউডোকোড

Begin
    For i = 0 to 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
    Print Encrypted message
End

ডিক্রিপশন সিউডোকোড

Begin
    For i = 0 to 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
    Print decrypted message
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;
    }
}

আউটপুট

For encryption:
Enter the message: tutorial
Enter key: 3
Enter your choice
1. Encryption
2. Decryption
1
Encrypted message: wxwruldo

For decryption:
Enter the message: wxwruldo
Enter key: 3
Enter your choice
1. Encryption
2. Decryption
2
Decrypted message: tutorial
  1. C++-এ ভিজিনার সাইফার (Vigenere Cipher) ইমপ্লিমেন্টেশন

  2. C++ প্রোগ্রাম: AVL ট্রি ইমপ্লিমেন্টেশন

  3. C++ STL-এ Set Symmetric Difference বাস্তবায়ন

  4. C++ প্রোগ্রাম: অ্যাডজেসেন্সি ম্যাট্রিক্স বাস্তবায়ন