栅栏加密算法 C++实现

栅栏的原理也很简单

大概步骤:

1.将明文去空格处理

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

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

4.插入空格

举例说明:

假设key为3,明文为:

ab cd ef

1.去空格

abcdef

2.分割

 

 123
1abc
2def

 

3.按列读取

adbecf

4.插入空格

ad be cf

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

#include <iostream>
#include <string>
#include <vector>
using namespace std;

string FenceEncrypt(string s, int key){
	vector<int> 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<<FenceEncrypt(s,key);
	return 0;
}

 

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您讲解这些加密算法以及相关的例题。 1. 恺撒算法(Caesar Cipher) 恺撒算法是一种替换加密的方法,它把明文中的每个字母都替换成字母表中它后面的第三个字母。例如,明文 "HELLO" 会被替换成密文 "KHOOR"。恺撒算法加密过程可以用以下公式表示: C(i) = (P(i) + k) mod 26 其中,C(i) 表示密文中第 i 个字母,P(i) 表示明文中第 i 个字母,k 表示密钥(这里 k = 3),mod 26 表示取模运算,保证加密后的字母在字母表中。 2. 栅栏加密算法(Rail Fence Cipher) 栅栏加密算法是一种置换加密的方法,它把明文分成若干个等长的部分,然后按照一定的顺序把这些部分排列起来,形成密文。例如,明文 "HELLO WORLD" 可以按照 3 行 4 列的方式排列成如下矩阵: H L O W E L R D L O 然后按照从上到下、从左到右的顺序读取矩阵中的字母,得到密文 "HLOWELRDLO"。栅栏加密算法加密过程可以用以下公式表示: C(i) = P(j, k) 其中,C(i) 表示密文中第 i 个字母,P(j, k) 表示明文中第 j 行、第 k 列的字母。 3. 矩阵加密算法(Matrix Cipher) 矩阵加密算法是一种乘法加密的方法,它把明文中的每个字母都转换成一个数字,然后用一个密钥矩阵对这些数字进行乘法运算,得到密文中的数字,最后再把数字转换回字母。例如,明文 "HELLO" 可以按照以下方式转换成数字: H E L L O 7 4 11 11 14 然后用一个 2 行 2 列的密钥矩阵进行乘法运算,得到以下密文: C(i) = (P(j) × K(j, k)) mod 26 其中,C(i) 表示密文中第 i 个数字,P(j) 表示明文中第 j 个数字,K(j, k) 表示密钥矩阵中第 j 行、第 k 列的数字。 4. RSA加密算法(RSA Cipher) RSA加密算法是一种公钥加密的方法,它使用两个密钥,一个公钥和一个私钥。公钥可以公开,用于加密数据,而私钥只应该由密钥的持有者保管,用于解密数据。RSA加密算法加密过程可以用以下公式表示: C = (P^e) mod n 其中,C 表示密文,P 表示明文,e 和 n 分别是公钥中的两个参数。解密过程可以用以下公式表示: P = (C^d) mod n 其中,P 表示明文,C 表示密文,d 和 n 分别是私钥中的两个参数。 5. 例题 以下是一个使用恺撒算法加密的例题: 明文:HELLO 密钥:3 解:把明文中的每个字母都替换成字母表中它后面的第三个字母,得到密文 KHOOR。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值