置換暗号化アルゴリズムC++実装

1424 ワード

書いてみると実は柵暗号化のアップグレード版
フェンスアルゴリズムに基づいて
カラムごとの読み出しにはkey配列の読み出し順を使用します
たとえば、次のようになります.
置換マトリクスkey
1
2
3
2
3
1

1回目の読み取りkey[1]すなわち2列目
2回目の読み取りkey[2]すなわち3列目
3回目の読み取りkey[3]すなわち1列目
残りはほとんど柵と同じです
#include 
#include 
#include 
using namespace std;

string PermuteEncrypt(string s, vector key){
	string primal,result;
	vector a;
	string middle[11];

	//          
	for (int i = 0; i < s.size(); i++)
		if(s[i] == ' ')a.push_back(i);
		else primal.push_back(s[i]);

	//     key  
	for(int i = 0; i < primal.size(); i++){
 		middle[i % key.size()].push_back(primal[i]);
	}

	//          *
	for(int i = 1; i < key.size(); i++){
		if(middle[i].size() != middle[0].size())
			for(int j = middle[i].size(); j < middle[0].size(); j++)
				middle[i] += '*';
	}

	//     
	for(int i = 0; i < key.size(); i++){
		result += middle[key[i]];
	}

	//       
	for (int i = 0, t = 0; i < s.size(); i++)
		if(a[t] == i){
			result.insert(result.begin() + i,' ');
			t++;
		}
	return result;
}

int main(){
	string s;
	vector key;
	int n;
	cin>>n;
	for(int i = 0; i < n; i++){
		int t;
		cin>>t;
		key.push_back(t-1);
	}
	cin.get(); 
	getline(cin,s);       
	cout<