You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
673 B
36 lines
673 B
|
|
"""
|
|
标准rc4
|
|
"""
|
|
|
|
def KSA(key):
|
|
""" Key-Scheduling Algorithm (KSA) """
|
|
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 PRGA(S):
|
|
""" Pseudo-Random Generation Algorithm (PRGA) """
|
|
i, j = 0, 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(key, text):
|
|
""" RC4 encryption/decryption """
|
|
S = KSA(key)
|
|
keystream = PRGA(S)
|
|
res = []
|
|
for char in text:
|
|
res.append(char ^ next(keystream))
|
|
return bytes(res)
|
|
|
|
|