C++ 程序实现凯撒密码

c++server side programmingprogramming

它是一种单字母密码,其中明文的每个字母都被另一个字母替换以形成密文。它是替换密码方案的最简单形式。

这种密码系统通常称为移位密码。其概念是用另一个字母替换每个字母,该字母被"移位"0 到 25 之间的某个固定数字。

对于这种类型的方案,发送者和接收者都同意一个用于移位字母的"秘密移位数"。这个介于 0 和 25 之间的数字成为加密的密钥。

名称"凯撒密码"偶尔用于描述移位密码,当"三位"移位时被使用。

过程

  • 为了加密明文字母,发送者将滑动尺放在第一组明文字母下方,并将其向左滑动秘密移位的位置数。

  • 然后将明文字母加密为下方滑动尺上的密文字母。下图显示了此过程的结果,即约定的三个位置的移位。在本例中,明文"tutorial"被加密为密文"wxwruldo"。这是移位 3 − 的密文字母表

  • 在收到密文后,接收者也知道秘密移位,将滑动尺放在密文字母表下方,并将其向右滑动约定的移位数,在本例中为 3。

  • 然后,他用下面滑动尺上的明文字母替换密文字母。因此,密文 ‘wxwruldo’ 被解密为 ‘tutorial’。要解密用移位 3 编码的消息,请使用移位 ‘-3’ 生成明文字母表,如下所示 −

以下是上述过程在 C++ 中的实现。

步骤和伪代码

将消息和密钥作为输入 −

用于加密

  • 输入:教程。
  • 输出: wxwruldo

用于解密

  • 输入: wxwruldo
  • 输出:教程

用于加密

开始
   对于 i = 0 到 msg[i] != '\0'
      ch = msg[i]
   //对小写字母进行加密
      如果 (ch >= 'a' 且 ch <= 'z')
         ch = ch + key
         if (ch > 'z')
            ch = ch - 'z' + 'a' - 1
         done
         msg[i] = ch
   //加密大写字母
      else if (ch >= 'A' and ch <= 'Z')
         ch = ch + key
         if (ch > 'Z')
            ch = ch - 'Z' + 'A' - 1
         done
         msg[i] = ch
      done
   done
   打印加密消息
结束

用于解密

开始
   对于 i = 0 至 msg[i] != '\0'
      ch = msg[i]
   //解密小写字母
      if(ch >= 'a' 和 ch <= 'z')
         ch = ch - key
         if (ch < 'a')
            ch = ch +'z' - 'a' + 1
      done
      msg[i] = ch
   //解密大写字母
      else if (ch >= 'A' and ch <= 'Z')
         ch = ch + key
         if (ch < 'A')
            ch = ch + 'Z' - 'A' + 1
         done
         msg[i] = ch
      done
   done
   打印解密消息
结束

示例

#include<iostream>
#include<string.h>
using namespace std;
int main() {
   cout<<"输入消息:\n";
   char msg[100];
   cin.getline(msg,100); //将消息作为输入
   int i, j, length,choice,key;
   cout << "输入密钥:";
   cin >> key; //将密钥作为输入
   length = strlen(msg);
   cout<<"输入您的选择 \n1. 加密 \n2. 解密 \n";
   cin>>choice;
   if (choice==1) //用于加密{
      char ch;
      for(int i = 0; msg[i] != '\0'; ++i) {
         ch = msg[i];
         //对小写字母进行加密
         If (ch >= 'a' && ch <= 'z'){
            ch = ch + key;
            if (ch > 'z') {
               ch = ch - 'z' + 'a' - 1;
            }  
            msg[i] = ch;
         }
           //加密大写字母
         else if (ch >= 'A' && ch <= 'Z'){
              ch = ch + key;
            if (ch > 'Z'){
                ch = ch - 'Z' + 'A' - 1;
            }
            msg[i] = ch;
         }
      }
      printf("加密消息:%s", msg);
   }
   else if (choice == 2) { //用于解密
      char ch;
      for(int i = 0; msg[i] != '\0'; ++i) {
         ch = msg[i];
         //解密为小写字母
         if(ch >= 'a' && ch <= 'z') {
            ch = ch - key;
            if(ch < 'a'){
               ch = ch + 'z' - 'a' + 1;
            }
            msg[i] = ch;
         }
         //解密大写字母
         else if(ch >= 'A' && ch <= 'Z') {
            ch = ch - key;
            if(ch < 'A') {
               ch = ch + 'Z' - 'A' + 1;
            }
            msg[i] = ch;
         }
      }
      cout << "解密消息:<< msg;
   }
}

输出

对于加密:
输入消息:
tutorial
输入密钥:3
输入您的选择
1. 加密
2. 解密
1
加密消息:wxwruldo

对于解密:
输入消息:
wxwruldo
输入密钥:3
输入您的选择
1. 加密
2. 解密
2
解密消息:tutorial

相关文章