在密码学中,RC4(来自Rivest Cipher 4的缩写)是一种流加密算法,密钥长度可变。它加解密使用相同的密钥,因此也属于对称加密算法。RC4是有线等效加密(WEP)中采用的加密算法,也曾经是TLS可采用的算法之一,极其容易被破解。
摘自百度百科
第一步:初始化S表(一共256个字节,从S[0]-S[255])
S[0]=0,S[1]=1,S[2]=2...S[255]=255
第二步:将输入的种子密钥1放入K表,K表也是256字节的大小,用K表填充T表
如果输入长度小于256个字节,则进行轮转,直到填满T表
例如输入密钥的是2,3,4,5 , 那么填入的是2,3,4,5,2,3,4,5,2,3,4,5........
由上述轮转过程得到256个字节的表T(用来作为密钥流生成的种子密钥2)
第三步:开始对S表进行置换操作(用来打乱初始种子密钥1)
从第零个字节开始,执行256次,保证每个字节都得到处理
j = 0;
for (i = 0 ; i < 256 ; i++){
j = (j + S[i] + T[i]) mod 256;
swap(S[i] , S[j]);
}
第四步:秘钥流的生成与加密
DataLen=1024 #假设明文长度为1024
i=0;
j=0;
while(DataLen--){
i = (i + 1) mod 256;
j = (j + S[i]) mod 256;
swap(S[i] , S[j]);
t = (S[i] + S[j]) mod 256;
key_str= S[t];这里的key_str[k] 就是当前生成的一个秘钥流(也叫伪随机数)
data[]=data[]^key_str; #不断和明文进行异或
#也可以先将密钥流保存在数组中,最后统一异或
}
到此为止,加密完成,解密的话就将密文和密钥流异或就得到明文了。