# 密钥编排函数defKSA(key):
S =[]# 状态数组
T =[]# 临时数组#初始化S和Tfor i inrange(256):
S.append(i)
T.append(key[i %len(key)])# print(S,T)#用T产生S的初始置换
j =0for i inrange(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
#密钥流生成函数defgenerateKey(S,M):
Ks =[]
i = j =0for _ inrange(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
# 加密函数defRc4_encode(M,key):
C =""
S = KSA(key)# 密钥编排
Ks = generateKey(S,M)for i inrange(len(M)):
C +=chr(ord(M[i])^ S[Ks[i]])return C
# 解密函数defRc4_decode(C,key):
M =""
S = KSA(key)# 密钥编排
Ks = generateKey(S,C)for i inrange(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)