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