加密过程:E (Pi , Ki) = Pi (XOR) Ki
解密:D (Ci , Ki) = Ci (XOR) Ki
#include<bits/stdc++.h>using namespace std;int main(){string plain, ciper, key;int len; //长度三者一致void change(string&, vector<int>&);//字符变数字vector<int> encrypt_compute(vector<int> m, vector<int> k);//加密计算vector<int> discrypt_compute(vector<int> c, vector<int> k);//解密计算void re_change(vector<int>&, string&);//数字变字符int flag; //操作标记do{cout << "请选择操作:1、加密 2、解密 3、结束:";cin >> flag;if (flag == 1){cout << "请输入明文:";cin >> plain;cout << "请输入相同长度的密钥:";cin >> key;len = plain.size();vector<int> p, c, k; //存变换的数字change(plain, p);change(key, k); //字母->数字c = encrypt_compute(p, k);re_change(c, ciper); //数字->字母cout << "密文是:" << ciper << endl;}if (flag == 2){cout << "请输入密文:";cin >> ciper;cout << "请输入相同长度的密钥:";cin >> key;len = ciper.size();vector<int> p, c, k; //存变换的数字change(ciper, c);change(key, k); //字母->数字p = discrypt_compute(c, k);plain = "";//清空明文原来的值re_change(p, plain);cout << "明文是:" << plain << endl;}} while (flag != 3);return 0;}void change(string& plain, vector<int>& number) //字母变数字{for (unsigned int i = 0; i < plain.size(); i++){number.push_back(plain[i] - 97); //a为0}}vector<int> encrypt_compute(vector<int> m, vector<int> k) //加密计算{vector<int> sum;for (unsigned int i = 0; i < m.size(); i++){sum.push_back((m[i] + k[i]) % 26);}return sum;}vector<int> discrypt_compute(vector<int> c, vector<int> k) //解密计算{vector<int> resum;int temp;for (unsigned int i = 0; i < c.size(); i++){temp = c[i] - k[i];if (temp < 0) temp += 26;resum.push_back(temp);}return resum;}void re_change(vector<int>& sum, string& c) //数字变字符{string temp;//用于处理insert函数变量传递for (unsigned int i = 0; i < sum.size(); i++){temp = sum[i] + 97;c.insert(i, temp);//a为0}}
