君若不娶,雪离不嫁,君若身亡,众生陪葬。
算法分析
1.RC4是一个典型的基于非线性数组变换的序列密码。它以一个足够大的数组S为基础,对其进行非线性变换,产生非线性的密钥流序列。
2.RC4算法S盒的大小根据参数n的值而变化,通常n=8,这样RC4可生成256个元素的数组S。
3.种子密钥长度为1~ 256
个字节(8~2048
比特)的可变长度,用于初始化256个字节的初始向量S。
4.RC4有两个主要算法:
- 密钥调度算法(KSA):用于打乱S盒的初始排列。
- 伪随机数生成算法(PRGA):用于输出随机序列并修改S的当前排列。
5.具体过程如下:
- 首先初始化S 即
S[i] = i
同时建立数组T用于填充秘钥K(若len(K)<256
, 则按序反复填充,直到T被填满) - 然后,对于每个S[i],根据T[i]的值将S[i] 与S中的另一个字节对换。
- 最后,利用PRGA生成秘钥流。从S中随机选取一个元素输出,并置换S以便下一次选取,选取过程取决于索引
i,j
。 - 加密时,K的值与明文字节异或;解密时,K的值与密文异或。
算法实现
# KSA 初始化S盒
def InitSbox(k):
# 初始化S盒 存初始值0-255
S = list(range(256))
T = [] # 用于轮转存放key
for i in range(256):
T.append(ord(k[i % len(k)])