มันเป็นรหัสตัวเลขแบบโมโน-ตัวอักษรซึ่งแต่ละตัวอักษรของข้อความธรรมดาจะถูกแทนที่ด้วยตัวอักษรอื่นเพื่อสร้างข้อความเข้ารหัส เป็นรูปแบบรหัสทดแทนที่ง่ายที่สุด
cryptosystem นี้โดยทั่วไปจะเรียกว่า Shift Cipher แนวคิดคือการแทนที่ตัวอักษรแต่ละตัวด้วยตัวอักษรอื่นซึ่ง 'เปลี่ยน' ด้วยตัวเลขคงที่บางตัวระหว่าง 0 ถึง 25
สำหรับโครงร่างประเภทนี้ ทั้งผู้ส่งและผู้รับตกลงใน 'หมายเลขกะลับ' สำหรับการเปลี่ยนตัวอักษร ตัวเลขนี้ซึ่งอยู่ระหว่าง 0 ถึง 25 จะกลายเป็นคีย์ของการเข้ารหัส
ชื่อ 'Caesar Cipher' บางครั้งใช้เพื่ออธิบาย Shift Cipher เมื่อใช้ 'shift of three'
กระบวนการ
-
ในการเข้ารหัสจดหมายข้อความธรรมดา ผู้ส่งจะวางไม้บรรทัดแบบเลื่อนไว้ใต้ตัวอักษรข้อความธรรมดาชุดแรก และเลื่อนไปทางซ้ายตามจำนวนตำแหน่งของกะลับ
-
จากนั้น จดหมายข้อความธรรมดาจะถูกเข้ารหัสไปยังตัวอักษรข้อความเข้ารหัสบนไม้บรรทัดแบบเลื่อนที่อยู่ด้านล่าง ผลลัพธ์ของกระบวนการนี้แสดงไว้ในภาพประกอบต่อไปนี้สำหรับการเปลี่ยนตำแหน่งที่ตกลงกันไว้สามตำแหน่ง ในกรณีนี้ 'บทช่วยสอน' ข้อความธรรมดาจะถูกเข้ารหัสเป็นข้อความเข้ารหัส 'wxwruldo' นี่คือตัวอักษร ciphertext สำหรับ Shift ของ 3 -
-
เมื่อได้รับข้อความเข้ารหัส ผู้รับที่รู้กะลับด้วย จะจัดตำแหน่งไม้บรรทัดแบบเลื่อนใต้ตัวอักษรข้อความเข้ารหัสและเลื่อนไปทางขวาตามหมายเลขกะที่ตกลงไว้ 3 ในกรณีนี้
-
จากนั้นเขาก็แทนที่ตัวอักษรไซเฟอร์เท็กซ์ด้วยตัวอักษรธรรมดาบนไม้บรรทัดแบบเลื่อนด้านล่าง ดังนั้นข้อความเข้ารหัส 'wxwruldo' จึงถูกถอดรหัสเป็น 'บทช่วยสอน' ในการถอดรหัสข้อความที่เข้ารหัสด้วย Shift เท่ากับ 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