C++凯撒移位加密算法(此代码适用于小写英文字母加密)

凯撒移位加密算法思想:明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。
本程序输入的加密字符串只能是小写英文字母,然后我加了个函数来处理输入的不合法的字符如,大写字母,特殊字符(# @ %.....)。然后加了while循环是有用处的。你可以把while删掉来看看运行结果和加了while有什么不同 。然后,那个密钥输入的只能是整型数据,这个地方字符我没处理,感兴趣可以自己改改。代码如下:
#include<iostream.h>
#include<math.h>
char str[100]; //存储字符串
char *p; //指向str数组
int key; //密钥

//加密:
void encrypt()
{
while(*p!='\0')
{
*p = (*p-97+key)%26 +97;
p++;
}
cout<<"CRYPT_OK"<<endl;
cout<<"加密后字符:"<<str<<endl;
}

//解密
void decrypt()
{
while(*p!='\0')
{
*p = (*p-71-key)%26+97;
p++;
}
cout<<"CRYPT_OK"<<endl;
cout<<"解密后字符:"<<str<<endl;

}

void isNotLetter() //判断输入的字符串是否全为字母
{
while(*p!='\0')
{
if(!(*p>='a'&&*p<='z'))
{
cout<<"该算法只适合字母加密和解密,请重新输入待处理字符:"<<endl;
cin>>str;
isNotLetter();
}
p++;
}
}

void main()
{
int ord;
while(1)
{
cout<<"1.加密\t2.解密\t3.退出"<<endl;
p=str;
cout<<"请选择功能:"<<endl;
cin>>ord;
if(ord==1)
{
cout<<"请输入待处理字符:"<<endl;
cin>>str;
isNotLetter();
p=str;


cout<<"请输入密钥:"<<endl;
cin>>key;
encrypt(); //加密
}
if(ord==2)
{
cout<<"请输入待处理字符:"<<endl;
cin>>str;
isNotLetter();
p=str;
cout<<"请输入密钥:"<<endl;
cin>>key;
decrypt(); //解密
}

if(ord==3) break;
}
}










(图片包括输入合理字符的运行结果和输入不合理字符的结果)
...全文
1052 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
是不是每次发帖必须要选分数啊?之前用手机不选分数发不了。真是醉了

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧