Caesar密码是传统的代替加密法
加密公式:
加密核心
for (int i = 0; i < s.length(); i++){if(str[i] >= 'a' && str[i] <= 'z') //小写字母str[i]=(char)((str[i]+n-97)%26+97);elsestr[i]=(char)((str[i]+n-65)%26+65); //大写字母}
解密公式
解密核心
for (int i = 0; i < s.length(); i++) {if (str[i] >= 'a' && str[i] <= 'z') //小写字母str[i] = (char) ((str[i] - 97 + 26 - n) % 26 + 97);else //大写字母str[i] = (char) ((str[i] - 65 + 26 - n) % 26 + 65);}
完整代码:
#include<bits/stdc++.h>using namespace std;// 判断 是否为字母//若均为字母,返回1 有其他字符返回 0bool isAlpha(string& str) {for (int i = 0; i < str.length(); i++){if (!(str[i] >= 'a' && str[i] <= 'z' || str[i] >= 'A' && str[i] <= 'Z'))return false;}return true;}//输出void printStr(string& str) {for (int i = 0; i < str.length(); i++){cout << str[i];}cout << endl;}//加密函数void encryption(string &str,int key) {//if (str[i] >= 'a' && str[i] <= 'z')//加密for (int i = 0; i < str.length(); i++) {if (str[i] >= 'a' && str[i] <= 'z') //小写字母str[i] = (str[i] + key - 97) % 26 + 97;elsestr[i] = (str[i] + key - 65) % 26 + 65; //大写字母}}//解密函数void decryption(string& str, int key) {//解密for (int i = 0; i < str.length(); i++) {if (str[i] >= 'a' && str[i] <= 'z') //小写字母str[i] = (str[i] - 97 + 26 - key) % 26 + 97;else //大写字母str[i] = (str[i] - 65 + 26 - key) % 26 + 65;}}int main() {string str="Hello";int n = 24;int key = n % 26; //密钥,移动key位int flag=isAlpha(str);if (flag == 0) { //若有其他字符,直接结束return -1;}printStr(str); //明文encryption(str,key);printStr(str); //密文decryption(str, key);printStr(str); //解密system("pause");return 0;}
