RC4算法详解
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) 2、初始密钥(由用户输入),长度任意 例如输入密钥的是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次,保证每个字节都得到处理 复制代码 隐藏代码
这样处理后的状态向量S几乎是带有一定的随机性了 4、最后是秘钥流的生成与加密,假设明文字节数是datalength=1024个字节(当然可以是任意个字节) 复制代码 隐藏代码
解密异或两次就是原文,所以只要把密钥流重新拿过来异或一次就能得到原文了 三、RC4包含的两个算法1、KSA 密钥调度算法(不懂看下第二张图片例子,看了就懂了)编程看图一,理解看图二。 实现对原始数据的随机化排列,即打乱S表。 步骤:初始化S表,选取S表子序列作为密钥填充到密钥数组R中,循环256次,交换S~i~和S~j~ 2、PRGA 伪随机密钥序列生成算法、随机选取数据作为密钥字节,并输出密钥流从S中随机选取元素作为密钥流字节,同时修改数组S的排序,以便下一次密钥流的选取。 步骤:S~i~和S~j~交换得到新数组,根据交换完成的数组计算h和k(k为密钥,从S中选,h为选择k时数组的下标) |