def RC4_INIT(key):key=list(key)for i in range(len(key)):key[i]=ord(key[i]) #需要将key中的每个字符转换为整数进行异或k=[0 for i in range(256)]s=[0 for i in range(256)]j=0length=len(key)for i in range(256):s[i]=ik[i]=key[i%length] #如果key为'123',则实际填充的为49,50,51for i in range(256):j=(j+s[i]+k[i])%256 #从头到尾,寻找各自的交换元素,共256!种可能s[i],s[j]=s[j],s[i]return s
# =============================================================================
# 二.加密 PRGA
# =============================================================================
def RC4_DECRYPTE(Data,key):Data=list(Data)for i in range(len(Data)):Data[i]=ord(Data[i])s=RC4_INIT(key)i=j=t=0length=len(Data)for k in range(length):i=(i+1)%256j=(j+s[i])%256s[i],s[j]=s[j],s[i]t=(s[i]+s[j])%256 #寻找两个元素,相加作为下标,以此找密码流,共2*256种可能#t=(s[i]+s[j]+24)%256 →不正常RC4Data[k]=chr(Data[k]^s[t])return ''.join(Data)
# =============================================================================
# 三.例子 加密的过程再加密一次就是解密了
# =============================================================================
print(RC4_DECRYPTE('hello world','123'))
print(RC4_DECRYPTE(';\x95Óî\x8aTs\x94W\x0fg','123'))