简单的加密算法RC4

RC4加密简介

1.RC4是一种对称的加密算法,即加密和解密使用相同密钥的加密算法。

2.RC4算法简单,运行速度快,而且密钥长度是可变的,可变范围为1-256字节,生成的密钥流的长度和明文的长度是对应的,密钥流是由密钥和其长度所决定的。

3.现如今,对于128比特以上的密钥长度,暴力搜索密钥是不行的,所以现如今RC4密钥是可靠的。

4.RC4主要包括了初始化算法(KSA)和加密算法两大部分。

RC4加密流程分析

  • 加密过程概述:

1.先初始化状态向量S(256个字节,用来作为密钥流生成的种子1)按照升序,给每一字节赋值0,1,2,3,4......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和T生成密钥流与铭文进行加密

  • 代码通常的结构:(mod==%)

1.初始化S和T

for i=0 to 255 do

S[i]=i;

T[i]=K[i mod keylen ]; //keylen是K的长度,该语句是为了限制T的长度

2.初始排列S

j=0;

for i=0 to 255 do

j=(j+S[i]+T[i]) mod 256;

swap(S[i],S[j]); //swep交换

3.产生密钥流,利用密钥流和明文进行加密

i,j=0;

for r=0 to len do //r为明文长度,r字节

i=(i+1) mod 256;

j=(j+S[i]) mod 256;

swap(S[i],S[j]);

t=(S[i],S[j]) mod 256;

k[r]=S[t];

data[r]^=k[r]; //单个字节加密  data[]明文  k[]密钥流的单个字节

^异或加密:同为0,不同为1

1101 a(明文)^1101 b(密钥流)=0110 c(加密后的数据)

a^b=c 加密

a=b^c 解密得到明文

例: 0110 ^ 1101 = 1011

RC4特征识别

1.反编译后可以看见多个循环次数为256的循环,以及存在一些%256的运算

2.最后处理输入数据的是异或

RC4常见魔改方法

由于RC4的加密就是生成密钥流和输入进行异或,所以通常魔改竞赛添加一些可逆运算

1.魔改初始化算法,可以将S初始化值并不是设置成0-255,也可以设置成其他的,也可以在S的初始置换过程中添加可逆运算

for(i=0;i<256;i++)           for(i=0;i<256;i++)
{						   {
    j=(j+S[i]+k[i])%256;	     j=(j+S[i]+k[i])%256;
    temp=S[i]; 				    temp=S[i];
    S[i]=S[j];				    S[i]=S[j];
    S[j]=temp; 				    S[j]=temp^0x37;
}    					   }  

其实这些都不影响,后面学会动调之后可以直接将它RC4_init算法生成的大小为255的S从内存中取出即可

2.由于最后加密flag是利用密钥流来单字节加密的,也有人会在这个地方添加一些可逆运算来进行魔改

flag[k]=flag[k]^S[t]^0x66

总之遵循:

enc_data =RC4(flag)

flag = RC4(enc_data)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值