Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

Caesar Cypher 구현을 위한 C++ 프로그램

<시간/>

평문의 각 문자를 다른 문자로 대체하여 암호문을 구성하는 단일 알파벳 암호입니다. 가장 단순한 형태의 대체 암호 체계입니다.

이 암호 시스템을 일반적으로 시프트 암호라고 합니다. 개념은 각 알파벳을 0에서 25 사이의 고정된 숫자만큼 '이동'하는 다른 알파벳으로 바꾸는 것입니다.

이러한 유형의 체계에서는 발신자와 수신자 모두 알파벳 이동을 위한 '비밀 이동 번호'에 동의합니다. 이 0~25 사이의 숫자가 암호화 키가 됩니다.

'3의 시프트'가 사용될 때 시프트 암호를 설명하기 위해 'Caesar Cipher'라는 이름이 가끔 사용됩니다.

프로세스

  • 일반 텍스트 문자를 암호화하기 위해 보낸 사람은 슬라이딩 눈금자를 일반 텍스트 문자의 첫 번째 세트 아래에 놓고 비밀 이동의 위치 수만큼 왼쪽으로 밉니다.

  • 그런 다음 일반 텍스트 문자는 아래의 슬라이딩 눈금자에 있는 암호문 문자로 암호화됩니다. 이 프로세스의 결과는 세 위치의 합의된 이동에 대한 다음 그림에 설명되어 있습니다. 이 경우 평문 'tutorial'은 암호문 'wxwruldo'로 암호화됩니다. 다음은 Shift of 3 −

    에 대한 암호문 알파벳입니다.

Caesar Cypher 구현을 위한 C++ 프로그램

  • 암호문을 수신하면 비밀 이동도 알고 있는 수신자는 자신의 슬라이딩 자를 암호문 알파벳 아래에 놓고 합의된 시프트 번호(이 경우 3)만큼 오른쪽으로 밉니다.

  • 그런 다음 그는 암호문 문자를 아래의 슬라이딩 눈금자에 있는 일반 텍스트 문자로 바꿉니다. 따라서 암호문 'wxwruldo'는 'tutorial'로 해독됩니다. Shift 3으로 인코딩된 메시지를 해독하려면 아래와 같이 '-3' 이동을 사용하여 일반 텍스트 알파벳을 생성하십시오. -

Caesar Cypher 구현을 위한 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