class RC4:
def __init__(self):
self.key=[]
self.crypto=[]
self.string=[]
self.string_ord=[]
self.keys=[]
def Crypto(self):
S = [i for i in range(0,256)]
j = 0
for i in range(0,256):
j = (j+S[i]+self.key[i%len(self.key)]) % 256
S[i] = S[i] + S[j]
S[j] = S[i] - S[j]
S[i] = S[i] - S[j]
i = 0
j = 0
self.keys = []
for index in range(0,max(len(self.string),len(self.crypto))):
i = (i+1)%256
j = (j+S[i])%256
S[i] = S[i] + S[j]
S[j] = S[i] - S[j]
S[i] = S[i] - S[j]
k = S[(S[i] + S[j]) % 256]
self.keys.append(k)
def encryption(self):
self.crypto=[]
for i,j in zip(self.string_ord,self.keys):
self.crypto.append(i^j)
return self.crypto
def decrypto(self):
L = []
for i,j in zip(self.crypto,self.keys):
L.append(int(i)^j)
return L
def getKey(self):
try:
for i in list(input("Key:")):
self.key.append(ord(i))
except:
pass
def getString(self):
try:
for i in list(input("Message:")):
self.string.append((i))
self.string_ord.append((ord(i)))
except:
pass
def getCString(self):
try:
for i in (input("\nPassword:")).split(' '):
self.crypto.append((int(i,16)))
except:
pass
def getHex(self,L):
sh = [hex(i)[2:] for i in L]
for i in sh:
print(i.upper().zfill(2), end=" ")
print()
return sh
r = RC4()
r.getString()
print("Message_hex:",end="")
r.getHex(r.string_ord)
r.getKey()
r.Crypto()
print("Keystream:",end="")
r.getHex(r.keys)
r.encryption()
print("Cphertext:",end="")
r.getHex(r.crypto)
print("Message_dec_hex:",end="")
r.getHex(r.decrypto())
print("Message_dec:",end="")
for i in r.decrypto():
print(chr(i),end="")
r.getCString()
print("Message_dec_hex:",end="")
r.getHex(r.decrypto())
print("Message_dec:",end="")
for i in r.decrypto():
print(chr(i),end="")
综上,写了个类方便大家自己自定义新内容