
#include<bits/stdc++.h>using namespace std;string encrypt(string pt, string key){ string ct = ""; // 密文 int k = 0; //控制key的长度 //ceil(a) 返回大于a的最小整数 int row = ceil((float)pt.length() / key.length()); // 行数 int col = key.length(); //列数 std::vector<std::vector<int> > Matx(row, vector<int>(col, 0)); ///初始化row * col二维动态数组Matx,初始化值为0 cout << "\n加密矩阵为 :" << endl; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if (k < pt.length()) { cout <<(char) (Matx[i][j] = pt[k++]) << " "; } else { cout << (char)(Matx[i][j] = 'x') << " "; } } cout << endl; } for (int i = 0; i < col; i++) { for (int j = 0; j < row; j++) { ct += Matx[j][key.find(i + '1')]; //密文抄送 } } return ct;}string decrypt(string ct, string key){ string pt = ""; // plaintext int k = 0; // ciptext iterator int num_row = ceil((float)ct.length() / key.length()); int num_col = key.length(); std::vector<std::vector<int> > Matx(num_row, vector<int>(num_col, 0)); for (int i = 0; i < num_col; i++) { for (int j = 0; j < num_row; j++) { Matx[j][key.find(i + '1')] = ct[k++]; } } for (int i = 0; i < num_row; i++) { for (int j = 0; j < num_col; j++) { pt += Matx[i][j]; } } return pt;}int main(){ string plaintext, key, ciphertext, decryptext; /*cout << "Enter text : "; cin >> plaintext;*/ plaintext = "transpoipher"; /*cout << "Enter key : "; cin >> key;*/ key = "4231"; cout << "\n明文 \t:" << plaintext << endl; ciphertext = encrypt(plaintext, key); cout << "\n密文 \t: " << ciphertext << endl; decryptext = decrypt(ciphertext, key); cout << "\n解密 \t: " << decryptext << endl;}