RC4算法详解
RC4加密算法(Rivest Cipher 4)是大名鼎鼎的RSA三人组中的头号人物 Ron Rivest 在 1987 年设计的密钥长度可变的流加密算法簇,之所以称其为簇,是由于其核心部分的S-box长度可为任意,但一般为256字节。它是有线等效加密(WEP)中采用的加密算法,也曾经是TLS可采用的算法之一。但是现在 RC4 已经不再安全。
算法原理
流密码算法的核心在于密钥流的生成,RC4 的密钥流生成过程主要有两步:
- 根据 key 生成 S-Box。
- 根据 S-Box 生成密钥流 因为整体原理并不复杂,直接附上 Python 源码:
def rc4(key, data):
S = list(range(256))
j = 0
out = []
# Key-scheduling algorithm
for i in range(256):
j = (j + S[i] + key[i % len(key)]) % 256
S[i], S[j] = S[j], S[i]
# Pseudo-random generation algorithm
i = j = 0
for char in data:
i = (i + 1) % 256
j = (j + S[i]) % 256
S[i], S[j] = S[j], S[i]
out.append(chr(ord(char) ^ S[(S[i] + S[j]) % 256]))
return "".join(out)