流密码加密(RC4和LFSR)

**流密码加密

1、RC4**

算法思想:
(1) 先初始化状态向量S(256个字节,用来作为密钥流生成的种子1),按照升序,给每个字节赋值0,1,2,3,4,5,6…,254,255。

(2) 初始密钥(由用户输入),长度任意。如果输入长度小于256个字节,则进行轮转,直到填满。例如输入密钥的是1,2,3,4,5,那么填入的是1,2,3,4,5,1,2,3,4,5,1,2,3,4,5…。由上述轮转过程得到256个字节的向量T(用来作为密钥流生成的种子2)

(3) 开始对状态向量S进行置换操作(用来打乱初始种子1),按照下列规则进行,从第零个字节开始,执行256次,保证每个字节都得到处理。
j = 0;
  for (i = 0 ; i < 256 ; i++){
    j = (j + S[i] + T[i]) mod 256;
    swap(S[i] , S[j]);
  }
这样处理后的状态向量S带有一定的随机性。

(4) 最后是秘钥流的生成与加密。假设我的明文字节数是datalength=1024个字节(当然可以是任意个字节)。
i=0;
j=0;
while(datalength–){//相当于执行1024次,这样生成的秘钥流也是1024个字节
  i = (i + 1) mod 256;
  j = (j + S[i]) mod 256;
  swap(S[i] , S[j]);
  t = (S[i] + S[j]) mod 256;
  k = S[t];//这里的K就是当前生成的一个秘钥流中的一位
  //可以直接在这里进行加密,当然也可以将密钥流保存在数组中,最后进行异或
  data[]=data[]^k; //进行加密,"^"是异或运算符
}

重要部分代码实现:
(1) 对状态向量S进行置换操作(用来打乱初始种子1)
在这里插入图片描述

(2) 秘钥流的生成与加密

在这里插入图片描述

2、“LFSR+J-K触发器”

算法思想:
(1) 首先我们定义两个线性反馈移位寄存器(LFSR),并对初始状态进行初始化,将LFSR的特征多项式作为密钥由用户输入(我们设置为8位密钥)。得到密钥我们就能根据以下线性反馈移位寄存器(LFSR)的原理,生成两个序列。这个LFSR可以产生的最大序列长度为2^m-1。

在这里插入图片描述

(2) 将两个序列分别作为JK触发器的输入端J、K,并且根据JK触发器的结构及逻辑真值表,可以得到255位的密钥流。
在这里插入图片描述

(3) 输入明文时,先将明文转换为二进制字符串,进行加密后,再转化为字符串。

重要部分代码实现:
1、 将字符串转化为二进制字符串
在这里插入图片描述

2、 将二进制字符串转化为字符串
在这里插入图片描述

3、获取两个线性反馈移位寄存器(LFSR),将两个序列分别作为JK触发器的输入端J、K,可以得到255位的密钥流。
在这里插入图片描述

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值