এটি একটি মনো-বর্ণমালার সাইফার যেখানে প্লেইনটেক্সটের প্রতিটি অক্ষর অন্য একটি অক্ষর দ্বারা প্রতিস্থাপিত হয় যাতে সাইফারটেক্সট গঠন করা হয়। এটি প্রতিস্থাপন সাইফার স্কিমের একটি সহজতম রূপ।
এই ক্রিপ্টোসিস্টেমটিকে সাধারণত শিফট সাইফার বলা হয়। ধারণাটি হল প্রতিটি বর্ণমালাকে অন্য বর্ণমালা দ্বারা প্রতিস্থাপন করা যা 0 এবং 25 এর মধ্যে কিছু নির্দিষ্ট সংখ্যা দ্বারা 'স্থানান্তরিত' হয়।
এই ধরনের স্কিমের জন্য, প্রেরক এবং প্রাপক উভয়েই বর্ণমালা পরিবর্তনের জন্য একটি 'গোপন স্থানান্তর নম্বর'-এ সম্মত হন। এই সংখ্যাটি 0 থেকে 25 এর মধ্যে এনক্রিপশনের কী হয়ে ওঠে৷
'সিজার সাইফার' নামটি মাঝে মাঝে শিফট সাইফারকে বর্ণনা করতে ব্যবহৃত হয় যখন 'তিনটির স্থানান্তর' ব্যবহার করা হয়।
প্রক্রিয়া
-
একটি প্লেইন টেক্সট অক্ষর এনক্রিপ্ট করার জন্য, প্রেরক প্লেইন টেক্সট অক্ষরের প্রথম সেটের নীচে স্লাইডিং রুলারকে অবস্থান করে এবং গোপন স্থানান্তরের অবস্থানের সংখ্যা অনুসারে এটিকে বামে স্লাইড করে৷
-
প্লেইনটেক্সট অক্ষরটি তারপর নিচের স্লাইডিং রুলারে সাইফারটেক্সট অক্ষরে এনক্রিপ্ট করা হয়। এই প্রক্রিয়ার ফলাফল তিনটি অবস্থানের একটি সম্মত স্থানান্তরের জন্য নিম্নলিখিত চিত্রে চিত্রিত করা হয়েছে। এই ক্ষেত্রে, প্লেইনটেক্সট 'টিউটোরিয়াল' সাইফারটেক্সট 'wxwruldo'-তে এনক্রিপ্ট করা হয়েছে। এখানে 3 −
শিফটের জন্য সাইফারটেক্সট বর্ণমালা রয়েছে
-
সাইফারটেক্সট পাওয়ার পর, রিসিভার যিনি গোপন স্থানান্তরও জানেন, তিনি সাইফারটেক্সট বর্ণমালার নীচে তার স্লাইডিং শাসককে অবস্থান করেন এবং এই ক্ষেত্রে সম্মত শিফট নম্বর 3 দ্বারা ডানদিকে স্লাইড করেন।
-
তারপর সে নিচের স্লাইডিং রুলারের প্লেইনটেক্সট অক্ষর দ্বারা সিফারটেক্সট অক্ষর প্রতিস্থাপন করে। তাই সিফারটেক্সট 'wxwruldo' কে 'টিউটোরিয়াল'-এ ডিক্রিপ্ট করা হয়েছে। 3-এর শিফটের সাথে এনকোড করা একটি বার্তা ডিক্রিপ্ট করতে, নীচে দেখানো হিসাবে '-3'-এর একটি শিফট ব্যবহার করে প্লেইনটেক্সট বর্ণমালা তৈরি করুন -
এখানে C++ এ উপরের প্রক্রিয়ার বাস্তবায়ন।
পদক্ষেপ এবং সিউডোকোড
ইনপুট হিসাবে বার্তা এবং কী নিন -
এনক্রিপশনের জন্য
- ইনপুট: টিউটোরিয়াল।
- আউটপুট: wxwruldo
ডিক্রিপশনের জন্য
- ইনপুট: wxwruldo
- আউটপুট: টিউটোরিয়াল
এনক্রিপশনের জন্য
Begin For i = 0 to msg[i] != '\0' ch = msg[i] //encrypt for lowercase letter If (ch >= 'a' and ch <= 'z') ch = ch + key if (ch > 'z') ch = ch - 'z' + 'a' - 1 done msg[i] = ch //encrypt for uppercase letter 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] //decrypt for lowercase letter if(ch >= 'a' and ch <= 'z') ch = ch - key if (ch < 'a') ch = ch +'z' - 'a' + 1 done msg[i] = ch //decrypt for uppercase letter 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); //take the message as input int i, j, length,choice,key; cout << "Enter key: "; cin >> key; //take the key as input length = strlen(msg); cout<<"Enter your choice \n1. Encryption \n2. Decryption \n"; cin>>choice; if (choice==1) //for encryption{ char ch; for(int i = 0; msg[i] != '\0'; ++i) { ch = msg[i]; //encrypt for lowercase letter If (ch >= 'a' && ch <= 'z'){ ch = ch + key; if (ch > 'z') { ch = ch - 'z' + 'a' - 1; } msg[i] = ch; } //encrypt for uppercase letter 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) { //for decryption char ch; for(int i = 0; msg[i] != '\0'; ++i) { ch = msg[i]; //decrypt for lowercase letter if(ch >= 'a' && ch <= 'z') { ch = ch - key; if(ch < 'a'){ ch = ch + 'z' - 'a' + 1; } msg[i] = ch; } //decrypt for uppercase letter 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