RC4

直接贴脚本了,非常简单且经典的加密算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
def rc4_ksa(key):
"""Key Scheduling Algorithm (KSA)"""
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_prga(S, data_len):
"""Pseudo-Random Generation Algorithm (PRGA)"""
i = j = 0
keystream = []
for _ in range(data_len):
i = (i + 1) % 256
j = (j + S[i]) % 256
S[i], S[j] = S[j], S[i]
K = S[(S[i] + S[j]) % 256]
keystream.append(K)
return keystream

def rc4_crypt(data: bytes, key: str) -> bytes:
"""Encrypt or decrypt data using RC4"""
S = rc4_ksa(key)
keystream = rc4_prga(S, len(data))
return bytes([b ^ k for b, k in zip(data, keystream)])

key = "secretkey"
plaintext = "Hello, RC4!".encode()

# 加密
ciphertext = rc4_crypt(plaintext, key)
print("Ciphertext (hex):", ciphertext.hex())

# 解密(再次调用 rc4_crypt)
decrypted = rc4_crypt(ciphertext, key)
print("Decrypted:", decrypted.decode())