java rc4 算法_RC4加密算法原理简单理解

学了这么多加密算法,首先要了解的是:对明文使用同一个密钥异或两次最后是得到原文的

RC4加密算法其实也是比较简单的,重点是在秘钥流生成器那里,其实也是比较简单的。

重点讲解RC4秘钥生成步骤

感觉这个流程图画的很不错,拿过来作为大家参考一下(图片转载地址:https://www.cnblogs.com/block2016/p/5601925.html)

7a4424bc3b8e197d64e8e09109ae1499.png

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就是当前生成的一个秘钥流中的一位

//可以直接在这里进行加密,当然也可以将密钥流保存在数组中,最后进行异或就ok

data[]=data[]^k; //进行加密,"^"是异或运算符

}

解密按照前面写的,异或两次就是原文,所以只要把密钥流重新拿过来异或一次就能得到原文了

这样就完成了一次生成密钥流及加密的过程,这也是RC4的全部工作,是不是很简单呢?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值