RC4算法

明文^密钥key=密文

关键在于密钥key的形成

一、RC4相关变量

1、密钥流:

密文=明文^密钥流(密钥流长度等于明文)

2、状态向量S:

长度为256,S[0],S[1]…..S[255]。每个单元都是一个字节,算法运行的任何时候,S都包括0-255的8比特数的排列组合,只不过值的位置发生了变换。

3、临时向量T:

长度为256,每个单元也是一个字节。如果密钥的长度是256字节,就直接把密钥的值赋给T,否则,轮转地将密钥的每个字节赋给T。

4、密钥K:

长度为1-256字节,注意密钥的长度keylen与明文长度、密钥流的长度没有必然关系,通常密钥的长度16字节(128比特)。

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

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

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

}

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

三、RC4包含的两个算法

1、KSA 密钥调度算法(不懂看下第二张图片例子,看了就懂了)

编程看图一,理解看图二。

实现对原始数据的随机化排列,即打乱S表。

步骤:初始化S表,选取S表子序列作为密钥填充到密钥数组R中,循环256次,交换S~i~和S~j~

RC4算法详解插图

RC4算法详解插图1

2、PRGA 伪随机密钥序列生成算法、随机选取数据作为密钥字节,并输出密钥流

从S中随机选取元素作为密钥流字节,同时修改数组S的排序,以便下一次密钥流的选取。

步骤:S~i~和S~j~交换得到新数组,根据交换完成的数组计算h和k(k为密钥,从S中选,h为选择k时数组的下标)

本站资源来自互联网收集,仅提供信息发布
一旦您浏览本站,即表示您已接受以下条约:
1.使用辅助可能会违反游戏协议,甚至违法,用户有权决定使用,并自行承担风险;
2.本站辅助严禁用于任何形式的商业用途,若被恶意贩卖,利益与本站无关;
3.本站为非营利性网站,但为了分担服务器等运营费用,收费均为赞助,没有任何利益收益。
死神科技 » RC4算法详解

死神科技,因为专业,所以领先。

网站首页 24小时自动发卡
在线客服
24小时在线客服
阿里云自动发卡,购卡进群售后
12:01
您好,有任何疑问请与我们联系!

选择聊天工具: