从网上找了一个RC4加密的代码,刚开始还行,但是后来加密一些连续字符或数字解密后乱码。
# 密钥编排函数
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
class RC4:
# 加密函数
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
if __name__ == "__main__":
key = '1234321'
m = '1222'
C = RC4.Rc4_encode(m,key)
print("加密后密文:" , C)
M = RC4.Rc4_decode(C,key)
print("解密后明文:",M)