和WEP加密说再见(一)

WEP 加密说再见(一)
好久没来发文了,前几天一直在找工作,确切的说实习,现在终于稳定下来了,从事和网络安全相关的行业,呵呵,工作我很喜欢。
上次已经发过几篇文章是关于 WEP 加密的,这次我想更加详细的分析下,一下子发不完,所以打算做个连载了。
WEP 是使用 RC4 来加密的,所以我打算详细说下这个加密,其实 RC4 加密非常的简单,它分为两部分:
一.   S-BOX 的打乱。
什么是 S-BOX ,我喜欢把它理解为数组。事实上, RC4 算法的 S-BOX ,确实是用数组来定义的,它的长度为 256 字节,我们定义为 S[256] 。当然我们先必须初始化下,初始化非常的简单,我们只要进行简单的线性填充, S[0]=0,S[1]=1……..S[255]=255
想打乱这个数组,我们需要用到另外一个数组,也就是密钥数组,我们定义为 K[256] ,也许你会问,我的密钥不一定会是 256 字节的,填不满这个数组怎么办?没关系,我们可以重复填,比如密钥为 key= 0 1 2 3 ),那我们就重复的填( 0 1 2 3 0 1 2 3……. ),直到填满整个数组。
要用到的两个数组都已经准备好了,那我们怎么打乱呢?首先,我们需要定义两个整数 i j ,都初始化为 0 ,然后对于 i=0 255 j=(j +S[i] +K[i]) mod 256 ,然后交换 S[i] S[j] 的值。因为 i 是从 0 255 累加的,等于遍历了整个 S-BOX ,从而达到了打乱 S-BOX 的目的。
具体,我们可以用一下 C 代码来实现:
for(int i=0;i<256;i+=)                   // 初始化数组 S[256] 和数组 K[256]
{
       S[i]=i;
      
       K[i]=key[i%strlen(key)];
}
 
int j=0;
for(int i=0;i<256;i++)                  // 打乱 S-BOX
{
       int temp;
j=(j +S[i] +K[i]) % 256;
temp=S[i];
S[i]=S[j];
S[j]=temp;
}
二.   密钥流的产生
经过上面的步骤,我们已经有了一个打乱掉的 S-BOX 。然后,我们需要根据这个 S-BOX ,来产生密钥流。要产生密钥流,我们需要经过一系列的运算和步骤。这里我们还是需要老朋友 i j 的帮忙。具体的步骤如下:
(1)………….……… 定义 i j ,并初始化为 0
(2)…………..………i= (i+1) mod 256;
       (3)…………………..j= (j+S[i]) mod 256;
       (4)………………….. 交换 S[i] S[j] 的值;
       (5)……………….. 定义另一个整数 t, 并且令 t= (S[i]+S[j]) mod 256;
       (6)………………..S[t] 就是所产生的随机字节,用来和明文做异或操作进行加密。
 
同样我们也可以用如下的 C 代码来实现:
       int i=0,j=0,t,q;
       while( 明文未结束 )
{
int temp;
              i= (i+1) mod 256;
.j= (j+S[i]) mod 256;
temp=S[i];
S[i]=S[j];
S[j]=temp;
t= (S[i]+S[j]) mod 256;
              ………..
}
上面就是 RC4 算法的实现方法,非常的简单,下面一篇,我将注重将 WEP 是如何使用 RC4 算法来加密的。
 

你可能感兴趣的:(网络,职场,安全,无线,休闲)