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'))