为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。输入一个以回车符为结束标志的字符串(少于80个字符),再输入一个整数offset,用凯撒密码将其加密后输出。恺撒密码是一种简单的替换加密技术,将明文中的所有字母都在字母表上偏移offset位后被替换成密文,当offset大于零时,表示向后偏移;当offset小于零时,表示向前偏移。
借用一个常量1="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
根据偏移位offset生成新的常量2,如offset=6,常量2="GHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEF"
然后对明文中逐个字符进行替换,常量1中找到这个字符的索引,在常量2中根据索引找到对应值替换。根据实际需要,常量可以换成字符数组。
也可以看一下这些字符的ascii码,找出规律,通过ascii码变换来加密。
#include <iostream>
int main()
{
//最大字符少于80
static const int MAX = 80;
char* a = new char[MAX];
std::cout << "输入密文:" << std::endl;
//输入
cin >> a;
std::cout << "输入偏移量:" << std::endl;
int m;
cin >> m;
for (int i = 0; i < 80; i++)
{
//读取字符串 直到换行为止
char &c = a[i];
//需要注意的是,cin并不会保留换行,而是舍弃换行添加'\0'
if ('\0' == c)
break;
c = c + m;
}
cout << a << endl;
return 0;
}
我这里使用的是cin,如果遇到空格或者换行就会停止,如果要更完美使用getline更好。但判断语句也会发生变化。