栅栏加密算法 C++实现

栅栏的原理也很简单

大概步骤:

1.将明文去空格处理

2.将得到的串每key个字符分割成key列矩阵

3.按列递增开始读取得到的串

4.插入空格

举例说明:

假设key为3,明文为:

ab cd ef

1.去空格

abcdef

2.分割

 

  1 2 3
1 a b c
2 d e f

 

3.按列读取

adbecf

4.插入空格

ad be cf

下面是代码 每一列不足的部分本来应该插入其他字符 只是加密的话没有必要 就不写了 如有需要 下一篇置换加密里面有写 

#include 
#include 
#include 
using namespace std;

string FenceEncrypt(string s, int key){
	vector a;
	string primal,result;
	for (int i = 0; i < s.size(); i++){//将原来字符串中的空格位置记录下来 新的串中无空格
		if(s[i] == ' ')a.push_back(i);
		else primal.push_back(s[i]);
	}

	for (int i = 0; i < key; i++)
		for (int j = i; j < primal.size(); j += key)
			result.push_back(primal[j]);

	if(a.size())
		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;
	int key;
	cin>>key;
	cin.get();
	getline(cin,s);
	cout<

 

你可能感兴趣的:(算法)