C++程式實現凱撒密碼


這是一種單字母替換密碼,其中明文中的每個字母都被替換為另一個字母以形成密文。它是替換密碼方案中最簡單的形式。

這種密碼系統通常被稱為移位密碼。其概念是用另一個“移位”了固定數字(0到25之間)的字母來替換每個字母。

對於這種型別的方案,傳送方和接收方都商定一個用於移位字母的“秘密移位數字”。這個介於0到25之間的數字成為加密的金鑰。

當使用“移位3”時,“凱撒密碼”這個名稱偶爾會被用來描述移位密碼。

過程

  • 為了加密明文字母,傳送方將滑動標尺放在第一組明文字母下方,並將其向左滑動秘密移位的位數。

  • 然後將明文字母加密為滑動標尺下方的密文字母。以下圖示顯示了商定移位3個位置的結果。在這種情況下,明文“tutorial”被加密為密文“wxwruldo”。以下是移位3的密文字母表:

  • 收到密文後,接收方(也瞭解秘密移位)將他的滑動標尺放在密文字母表下方,並將其向右滑動商定的移位數,在本例中為3。

  • 然後他用滑動標尺下方的明文字母替換密文字母。因此,密文“wxwruldo”被解密為“tutorial”。要解密使用移位3編碼的訊息,請使用“ -3”的移位生成明文字母表,如下所示:

以下是上述過程在C++中的實現。

步驟和虛擬碼

將訊息和金鑰作為輸入:

加密

  • 輸入:tutorial。
  • 輸出:wxwruldo

解密

  • 輸入:wxwruldo
  • 輸出:tutorial

加密

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

更新於: 2019年7月30日

24K+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.