概念
RC4(Rivest Cipher 4)是一种**流密码(Stream Cipher)**算法,由著名密码学家 Ronald Rivest 在 1987 年为 RSA Security 设计。但由于后来发现的安全漏洞,现代系统中已不推荐使用 RC4。
原理
RC4 由两个核心部分组成:
| 缩写 | 全称 | 功能 |
|---|---|---|
| KSA | Key Scheduling Algorithm | 密钥调度算法:根据密钥初始化 S-box(状态数组 S) |
| PRGA | Pseudo-Random Generation Algorithm | 伪随机生成算法:用 S-box 生成伪随机密钥流,并与数据异或加解密 |
RC4 是对称流密码:加密和解密过程完全一样,只是用同样的密钥流异或。
KSA
目标:用密钥 K 初始化一个 256 字节的数组 S,完成后,S 是一个由密钥决定的“打乱”状态。
步骤:
-
创建数组
S[0..255],初始为顺序值:S = [0, 1, 2, 3, ..., 255] -
创建临时数组
T[0..255],根据密钥K填充:- 假设密钥长度为
keylen字节 T[i] = K[i % keylen]
例如:密钥是
"Key"(3 字节),则:T[0] = 'K', T[1] = 'e', T[2] = 'y', T[3] = 'K', T[4] = 'e', ... - 假设密钥长度为
-
打乱
S数组:j = 0 for i in range(256): j = (j + S[i] + T[i]) % 256 swap(S[i], S[j])
PRGA
目标:从 S 中生成一个无限长的密钥流字节序列。
步骤:
i = 0
j = 0
while True:
i = (i + 1) % 256
j = (j + S[i]) % 256
swap(S[i], S[j])
K = S[(S[i] + S[j]) % 256]
output K # 这个 K 就是下一个密钥流字节
加密与解密
由于 异或(XOR)的可逆性,加密和解密过程完全一样!
加密:
密文 = 明文 XOR 密钥流
解密:
明文 = 密文 XOR 密钥流
下面提供我的RC4加密解密脚本
def rc4_init(key):
"""KSA: 初始化 S 数组"""
key = [ord(c) for c in key] # 转为字节
S = list(range(256))
j = 0
for i in range(256):
j = (j + S[i] + key[i % len(key)]) % 256
S[i], S[j] = S[j], S[i]
return S
def rc4_generate_keystream(S):
"""PRGA: 生成密钥流生成器"""
i = 0
j = 0
while True:
i = (i + 1) % 256
j = (j + S[i]) % 256
S[i], S[j] = S[j], S[i]
K = S[(S[i] + S[j]) % 256]
yield K
def rc4_crypt(data, key):
"""加密或解密字符串"""
S = rc4_init(key)
keystream = rc4_generate_keystream(S)
if isinstance(data, str):
data = [ord(c) for c in data]
return bytes([b ^ next(keystream) for b in data])
# === 使用示例 ===
key = "Secret"
plaintext = "Hello, World!"
# 加密
ciphertext = rc4_crypt(plaintext, key)
print("密文(十六进制):", ciphertext.hex())
# 解密
decrypted = rc4_crypt(ciphertext, key)
print("解密结果:", decrypted.decode('ascii'))
1569

被折叠的 条评论
为什么被折叠?



