加密过程: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
}
}