# 密钥编排函数
def KSA(key):
S = [] # 状态数组
T = [] # 临时数组
#初始化S和T
for i in range(256):
S.append(i)
T.append(key[i % len(key)])
# print(S,T)
#用T产生S的初始置换
j = 0
for i in range(256):
j = (j + S[i] + ord(T[i])) % 256
S[i],S[j] = S[j],S[i] #交换S[i] 和 S[j]
# print(S,T)
return S
#密钥流生成函数
def generateKey(S,M):
Ks = []
i = j = 0
for _ in range(len(M)):
i = (i + 1) % 26
j = (j + S[i]) % 256
S[i],S[j] = S[j],S[i]
t = (S[i] + S[j]) % 256
Ks.append(t)
return Ks
# 加密函数
def Rc4_encode(M,key):
C = ""
S = KSA(key) # 密钥编排
Ks = generateKey(S,M)
for i in range(len(M)):
C += chr(ord(M[i]) ^ S[Ks[i]])
return C
# 解密函数
def Rc4_decode(C,key):
M = ""
S = KSA(key) # 密钥编排
Ks = generateKey(S,C)
for i in range(len(C)):
M += chr(ord(C[i]) ^ S[Ks[i]])
return M
key = 'no-so-random-key'
m = 'Good you are corrent'
C = Rc4_encode(m,key)
print("加密后密文:" , C)
M = Rc4_decode(C,key)
print("解密后明文:",M)
python简单实现Rc4算法
最新推荐文章于 2023-11-23 22:36:15 发布