Nó là một mật mã đơn chữ cái, trong đó mỗi chữ cái của bản rõ được thay thế bằng một chữ cái khác để tạo thành bản mã. Đây là một dạng lược đồ mật mã thay thế đơn giản nhất.
Hệ thống mật mã này thường được gọi là Mật mã dịch chuyển. Khái niệm là thay thế mỗi bảng chữ cái bằng một bảng chữ cái khác được 'dịch chuyển' bởi một số cố định trong khoảng từ 0 đến 25.
Đối với loại lược đồ này, cả người gửi và người nhận đều đồng ý về một 'số chuyển đổi bí mật' để chuyển bảng chữ cái. Con số từ 0 đến 25 này sẽ trở thành khóa mã hóa.
Tên 'Caesar Cipher' đôi khi được sử dụng để mô tả Shift Cipher khi sử dụng "shift of ba".
Quy trình
-
Để mã hóa một ký tự rõ ràng, người gửi đặt thước trượt bên dưới tập hợp các ký tự rõ ràng đầu tiên và trượt nó sang TRÁI theo số vị trí của sự thay đổi bí mật.
-
Sau đó, ký tự bản rõ được mã hóa thành ký tự bản mã trên thước trượt bên dưới. Kết quả của quá trình này được mô tả trong hình minh họa sau đây cho sự thay đổi ba vị trí đã thỏa thuận. Trong trường hợp này, bản rõ ‘hướng dẫn’ được mã hóa thành bản mã ‘wxwruldo’. Đây là bảng chữ cái bản mã cho Shift 3 -
-
Khi nhận được bản mã, người nhận cũng biết sự dịch chuyển bí mật, đặt thước trượt của mình bên dưới bảng chữ cái bản mã và trượt nó đến RIGHT theo số ca đã thỏa thuận, trong trường hợp này là 3.
-
Sau đó, anh ta thay thế ký tự bản mã bằng ký tự rõ ràng trên thước trượt bên dưới. Do đó, bản mã ‘wxwruldo’ được giải mã thành ‘hướng dẫn’. Để giải mã một tin nhắn được mã hóa bằng phím Shift 3, hãy tạo bảng chữ cái bản rõ bằng cách sử dụng dịch chuyển ‘-3’ như hình dưới đây -
Đây là cách thực hiện quy trình trên trong C ++.
Các bước và mã giả
Lấy tin nhắn và phím làm đầu vào -
Để mã hóa
- Đầu vào: hướng dẫn.
- Đầu ra: wxwruldo
Để giải mã
- Đầu vào: wxwruldo
- Đầu ra: hướng dẫn
Để mã hóa
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
Để giải mã
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
Ví dụ
#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; } }
Đầu ra
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