C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

シーザー暗号を実装するC++プログラム


これは、平文の各文字が別の文字に置き換えられて暗号文を形成するモノアルファベット暗号です。これは、換字式暗号方式の最も単純な形式です。

この暗号システムは、一般にシフト暗号と呼ばれます。コンセプトは、各アルファベットを、0から25の間の固定数で「シフト」された別のアルファベットに置き換えることです。

このタイプのスキームでは、送信者と受信者の両方がアルファベットをシフトするための「秘密のシフト番号」に同意します。この0から25までの数字が暗号化の鍵になります。

「シーザー暗号」という名前は、「3シフト」が使用されている場合のシフト暗号を表すために使用されることがあります。

プロセス

  • 平文を暗号化するために、送信者は計算尺を最初の平文のセットの下に配置し、秘密シフトの位置の数だけ左に計算尺をスライドさせます。

  • 次に、平文の文字は、下の計算尺の暗号文の文字に暗号化されます。このプロセスの結果は、3つのポジションの合意されたシフトについて次の図に示されています。この場合、平文の「チュートリアル」は暗号文の「wxwruldo」に暗号化されます。これが3シフトの暗号文アルファベットです-

シーザー暗号を実装するC++プログラム

  • 暗号文を受信すると、秘密のシフトも知っている受信者は、計算尺を暗号文のアルファベットの下に配置し、合意されたシフト番号(この場合は3)で計算尺を右にスライドさせます。

  • 次に、下の計算尺で暗号文の文字を平文の文字に置き換えます。したがって、暗号文「wxwruldo」は「tutorial」に復号化されます。 Shiftが3でエンコードされたメッセージを復号化するには、以下に示すように、「-3」のシフトを使用してプレーンテキストのアルファベットを生成します-

シーザー暗号を実装するC++プログラム

上記のプロセスの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

  1. STLにSet_Symmetric_differenceを実装するC++プログラム

    これは、set_symmetric_differenceを実装するためのC++プログラムです。 2つのセットの対称差は、一方のセットには存在するが、もう一方のセットには存在しない要素によって構築されます。 一般的な集合演算は-です セットユニオン 交差点を設定 対称集合の差または排他的論理和 差または減算を設定 アルゴリズム Begin    Declare set vector v and iterator st.   Initialize st = set_symmetric_difference (set1, set1 + n, set2, se

  2. 隣接行列を実装するためのC++プログラム

    グラフの隣接行列は、サイズV x Vの正方行列です。VはグラフGの頂点の数です。この行列では、各辺にV個の頂点がマークされています。グラフにiからjの頂点までのエッジがある場合、i thの隣接行列に 行とjth 列は1(または加重グラフの場合はゼロ以外の値)になります。それ以外の場合、その場所は0を保持します。 隣接行列表現の複雑さ: 隣接行列表現は、計算中にO(V2)のスペースを取ります。グラフに最大数のエッジと最小数のエッジがある場合、どちらの場合も必要なスペースは同じになります。 入力: 出力: 0 1 2 3 4