加密过程:
    E (Pi , Ki) = Pi (XOR) Ki
    解密:
    D (Ci , Ki) = Ci (XOR) Ki

    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. int main()
    4. {
    5. string plain, ciper, key;
    6. int len; //长度三者一致
    7. void change(string&, vector<int>&);//字符变数字
    8. vector<int> encrypt_compute(vector<int> m, vector<int> k);//加密计算
    9. vector<int> discrypt_compute(vector<int> c, vector<int> k);//解密计算
    10. void re_change(vector<int>&, string&);//数字变字符
    11. int flag; //操作标记
    12. do
    13. {
    14. cout << "请选择操作:1、加密 2、解密 3、结束:";
    15. cin >> flag;
    16. if (flag == 1)
    17. {
    18. cout << "请输入明文:";
    19. cin >> plain;
    20. cout << "请输入相同长度的密钥:";
    21. cin >> key;
    22. len = plain.size();
    23. vector<int> p, c, k; //存变换的数字
    24. change(plain, p);
    25. change(key, k); //字母->数字
    26. c = encrypt_compute(p, k);
    27. re_change(c, ciper); //数字->字母
    28. cout << "密文是:" << ciper << endl;
    29. }
    30. if (flag == 2)
    31. {
    32. cout << "请输入密文:";
    33. cin >> ciper;
    34. cout << "请输入相同长度的密钥:";
    35. cin >> key;
    36. len = ciper.size();
    37. vector<int> p, c, k; //存变换的数字
    38. change(ciper, c);
    39. change(key, k); //字母->数字
    40. p = discrypt_compute(c, k);
    41. plain = "";//清空明文原来的值
    42. re_change(p, plain);
    43. cout << "明文是:" << plain << endl;
    44. }
    45. } while (flag != 3);
    46. return 0;
    47. }
    48. void change(string& plain, vector<int>& number) //字母变数字
    49. {
    50. for (unsigned int i = 0; i < plain.size(); i++)
    51. {
    52. number.push_back(plain[i] - 97); //a为0
    53. }
    54. }
    55. vector<int> encrypt_compute(vector<int> m, vector<int> k) //加密计算
    56. {
    57. vector<int> sum;
    58. for (unsigned int i = 0; i < m.size(); i++)
    59. {
    60. sum.push_back((m[i] + k[i]) % 26);
    61. }
    62. return sum;
    63. }
    64. vector<int> discrypt_compute(vector<int> c, vector<int> k) //解密计算
    65. {
    66. vector<int> resum;
    67. int temp;
    68. for (unsigned int i = 0; i < c.size(); i++)
    69. {
    70. temp = c[i] - k[i];
    71. if (temp < 0) temp += 26;
    72. resum.push_back(temp);
    73. }
    74. return resum;
    75. }
    76. void re_change(vector<int>& sum, string& c) //数字变字符
    77. {
    78. string temp;//用于处理insert函数变量传递
    79. for (unsigned int i = 0; i < sum.size(); i++)
    80. {
    81. temp = sum[i] + 97;
    82. c.insert(i, temp);//a为0
    83. }
    84. }