IV及初始化向量S,
密文:密文第i字节=明文第i字节^密钥流第i字节
密钥流:根据明文和密钥生成,密钥流长度和明文长度一样
状态向量S或IV:长度256个8位,256个字节
临时向量T:长度也是256个8位,256个字节,如果密钥的长度是256字节,就直接把密钥的值赋给T,否则,轮转地将密钥的每个字节赋给T;
密钥K:密钥长度与明文长度、密钥流的长度没有必然关系,通常密钥的长度取为16字节(128比特)
1.初始化S和T:
S的值升序被置为0-255
T的值是密钥K的值的循环复制
2.S的初始置换
用T产生S的初始置换,置换伪码如下
j = 0;
for (i = 0 ; i < 256 ; i++){
j = (j + S[i] + T[i]) mod 256;
swap(S[i] , S[j]);
}
因为对S的操作仅是交换,S仍然包含所有值为0-255的元素。
3.密钥流的生成
i , j = 0;
while (true){
i = (i + 1) mod 256;
j = (j + S[i]) mod 256;
swap(S[i] , S[j]);
t = (S[i] + S[j]) mod 256;
k = S[t];
}
k即为密钥流的一个字节
WEP加密、RC4算法
RC4
RSA实验室研发的对称加密 流 算法
实现简单
速度快
加密: 对明文流和密钥流进行XOR计算
解密: 对密文流和密钥流进行XOR计算
RC4算法key由两个过程生成
合并IV和PSK,利用Key Scheduling Algorithm (KSA)算法生成起始状态表
Pseudo-Random Generation Algorithm (PRGA)算法生成最终密钥流
rc4算法中加密用的key就是key本身,一般长度16字节128位
rc4md5中加密用的key是md5(key+iv)得到结果位16字节hash值128位