Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình C ++ để triển khai Caesar Cypher

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 -

Chương trình C ++ để triển khai Caesar Cypher

  • 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 -

Chương trình C ++ để triển khai Caesar Cypher

Đâ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