置換暗号化アルゴリズムC++実装
1424 ワード
書いてみると実は柵暗号化のアップグレード版
フェンスアルゴリズムに基づいて
カラムごとの読み出しにはkey配列の読み出し順を使用します
たとえば、次のようになります.
置換マトリクスkey
1
2
3
2
3
1
則
1回目の読み取りkey[1]すなわち2列目
2回目の読み取りkey[2]すなわち3列目
3回目の読み取りkey[3]すなわち1列目
残りはほとんど柵と同じです
フェンスアルゴリズムに基づいて
カラムごとの読み出しには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<