一、什么是凯撒加密
它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。
例如:偏移量为3时
明文:abc
密文:def
#include<iostream>
#include<string>
using namespace std;
int main()
{
int K,x;
cout<<"请选择操作(1代表加密;2代表解密):";
cin>>x;
cout<<"请输入密钥:";
cin>>K;
string a; //字符串
getchar(); //读入上一行输入的回车符,否则回车符将被getline()读入
cout<<"请输入明文/密文:" ;
getline(cin,a);
if(x==1)//加密过程
{
for(int i=0;i<a.length();i++)
{
if(a[i] !=' ')
{
if(a[i]>='a' && a[i]<='z') a[i]=char((a[i]+K-'a')%26+'a');
if(a[i]>='A' && a[i]<='Z') a[i]=char((a[i]+K-'A')%26+'A');
}
}
}
if(x==2)//已知加密密钥的解密过程
{
for(int i=0;i<a.length();i++)
{
if(a[i]!=' ')
{ //相减过程出会出现负数情况,因此需要先进行“+26”操作再取余
if(a[i]>='a' && a[i]<='z') a[i]=char((a[i]-K-'a'+26)%26+'a');
if(a[i]>='A' && a[i]<='Z') a[i]=char((a[i]-K%-'A'+26)%26+'A');
}
}
}
cout<<a<<endl;
}
运行结果: