wep 原理 第一

Python010

wep 原理 第一,第1张

WEP加密算法实际上是利用RC4流密码算法作为伪随机数产生器,将由初始矢量IV和WEP密钥组合而成的种子生成WEP密钥流(图中的KSA和PRGA部分),再由该密钥流与WEP帧数据负载进行异或运算来完成加密运算.

RC4流密码是面向字节的,在算法过程中只是用了置换的方法,按照图中分成的两个部分,其C代码如下

KSA部分:

[cpp] view plaincopy

int i,j = 0

for (i = 0i <256i++)

{

s[i] = i

}

for (i = 0i <256i++)

{

k[i] = key[i % 8]//针对64bit的WEP加密,128bit的为[i % 16]

}

for (i = 0i <256i++)

{

j = (j + s[i] + k[i]) % 256

Swap(s[i], s[j])//进行置换

}

其中s[256]为状态列,k[256]为密钥列,key[8]为64位的密钥,状态列初始化为{0,1,2,3, , ,255},密钥列按照提供的密钥8字节重复填充至256字节满,通过置换,生成了一个状态列用以生成密钥流.

PRGA部分(只生成256个字节的密钥流):

[cpp] view plaincopy

for (i = 0, j = 0, LengthofKeyStream = 0LengthofKeyStream <256LengthofKeyStream++)

{

i = (i + 1) % 256

j = (j + s[i]) % 256

Swap(s[i], s[j])

keystream[LengthofKeyStream] = s[(s[i] + s[j]) % 256]

}

至此,我们就有了一个可以进行异或加密的密钥流keystream[256].在WEP加密当中应该是根据数据data的长度来调整需要得到的密钥流的长度。

序列密码又称流密码,原理是明文流和密钥流按顺序逐位异或运算,从而产出密文流,序列密码属于对合运算。

以下是典型的序列密码RC4的加解密算法实现。其中秘钥流产生算法由RSA和PRGA两个核心子算法组成。

其中引用了FrankTools模块中的ItoB, XOR, StoB, BtoS, swap函数,FrankTools模块中将常用函数打包以便调用,展示如下:

水平和精力所限,疏漏之处难免,欢迎各位多多不吝赐教!

[email protected]