এটি একটি মোনো-আলফাবেটিক সাইফার (mono-alphabetic cipher) যেখানে প্লেইনটেক্সটের প্রতিটি অক্ষর অন্য একটি অক্ষর দ্বারা সাবস্টিটিউট (substituted) হয় সাইফারটেক্সট (ciphertext) ফর্ম করতে। এটি সাবস্টিটিউশন সাইফার স্কিমের সবচেয়ে সহজ রূপ।
এই ক্রিপ্টোসিস্টেমকে সাধারণত শিফট সাইফার (Shift Cipher) বলা হয়। কনসেপ্ট হলো প্রতিটি অ্যালফাবেটকে অন্য একটি অ্যালফাবেট দিয়ে রিপ্লেস করা যা ০ থেকে ২৫ পর্যন্ত একটি নির্দিষ্ট সংখ্যা만큼 'শিফট' (shifted) হয়েছে।
এই স্কিমের জন্য সেন্ডার এবং রিসিভার উভয়েই একটি 'সিক্রেট শিফট নম্বর' (secret shift number) নিয়ে একমত হন। এই নম্বর (০ থেকে ২৫ এর মধ্যে) এনক্রিপশনের কী (key) হয়।
'সিজার সাইফার' (Caesar Cipher) নামটি কখনো কখনো শিফট সাইফারকে বোঝাতে ব্যবহৃত হয় যখন 'শিফট অফ থ্রি' (shift of three) ব্যবহার করা হয়।
প্রসেস (Process)
একটি প্লেইনটেক্স্ট লেটার এনক্রিপ্ট করতে, সেন্ডার স্লাইডিং রুলার (sliding ruler) কে প্লেইনটেক্স্ট লেটারসেটের নিচে রাখে এবং সিক্রেট শিফটের পরিমাণ만큼 বামে (LEFT) স্লাইড করে।
প্লেইনটেক্স্ট লেটারটি স্লাইডিং রুলারের নিচে থাকা সাইফারটেক্স্ট লেটারে এনক্রিপ্ট হয়। এগ্রিদ শিফট ৩ হলে ফলাফল নিচের চিত্রে দেখানো হয়েছে। এই কেসে প্লেইনটেক্স্ট 'tutorial' এনক্রিপ্ট হয়ে 'wxwruldo' হয়। শিফট ৩-এর জন্য সাইফারটেক্স্ট অ্যালফাবেট:

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

উপরোক্ত প্রসেসের 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