RC4 加密算法
添加时间:2022-03-06 22:49:03
来源:
RC4是一种流密码和可变长度密钥算法。该算法一次加密一个字节(或一次加密更大的单位)。
密钥输入是伪随机位生成器,它产生一个 8 位数字流,在不知道输入密钥的情况下是不可预测的,生成器的输出称为密钥流,一次一个字节与使用 X- 的明文流密码组合或操作。
例子:
RC4 加密
10011000 ? 01010000 = 11001000
RC4 解密
11001000 ? 01010000 = 10011000
密钥生成算法——
一个 1 到 256 字节的可变长度密钥用于初始化一个 256 字节的状态向量 S,其元素为 S[0] 到 S[255]。对于加密和解密,通过以系统方式选择 255 个条目中的一个,从 S 生成一个字节 k,然后再次排列 S 中的条目。
Key-Scheduling Algorithm:
初始化:S的条目被设置为等于从0到255的值,按升序排列,创建一个临时向量T。
如果密钥 k 的长度为 256 字节,则将 k 分配给 T。否则,对于长度为 (k-len) 字节的密钥,从 K 复制 T 的前 k-len 个元素,然后重复 K尽可能多地填充 T。这个想法如下所示:
for
i = 0 to 255 do S[i] = i;
T[i] = K[i mod k - len];
我们使用 T 来产生 S 的初始排列。从 S[0] 到 S[255] 开始,并且对于每个 S[i] 算法,根据 T[i] 规定的方案将其与 S 中的另一个字节交换,但是S 仍将包含从 0 到 255 的值:
j = 0;
for
i = 0 to 255 do
{
j = (j + S[i] + T[i])mod 256;
Swap(S[i], S[j]);
}
伪随机生成算法(Stream Generation):
一旦向量S被初始化,输入的key就不会被使用。在这一步中,对于每个 S[i] 算法,根据 S 的当前配置规定的方案将其与 S 中的另一个字节交换。到达 S[255] 后,该过程继续,再次从 S[0] 开始
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];
使用 X-Or() 加密:
55
新闻:
2015 年 9 月,微软宣布在 Microsoft Edge 和 Internet Explorer 11 中停止使用 RC4。