流加密算法RC4的实现
RC4算法的基本步骤是:
1. 使用密钥初始化一个查找表
2. 利用查找表,生成一个字节的子密钥
3. 把子密钥与明文或者密文做异或运算,就得到了对应的加密文或者解密文
Python 实现如下:
key = 'Wiki123!"#'
plaintext = 'youaregood'
lookup = range(0,256)
keylen = len(key)
# encrypt
j = 0
i = 0
for i in range(0,256):
j = (j + lookup[i] + ord(key[i % keylen])) % 256
temp = lookup[i]
lookup[i] = lookup[j]
lookup[j] = temp
i = 0
j = 0
def keystreambyte():
global i
global j
i = (i+1) % 256
j = (j+lookup[i]) % 256
temp = lookup[i]
lookup[i] = lookup[j]
lookup[j] = temp
return lookup[(lookup[i] + lookup[j])%256]
ciphertext=[]
for k in range(0,len(plaintext)):
byte = keystreambyte()
#print hex(byte)
ciphertext.append(ord(plaintext[k]) ^ byte)
print "plaintext:"
print plaintext
print "key:"
print key
print "ciphertext:"
result=[]
for i in range(0,len(ciphertext)):
result.append(hex(ciphertext[i]))
print result
#decrypt
j = 0
i = 0
lookup = range(0,256)
for i in range(0,256):
j = (j + lookup[i] + ord(key[i % keylen])) % 256
temp = lookup[i]
lookup[i] = lookup[j]
lookup[j] = temp
i = 0
j = 0
deciphertext=''
for k in range(0,len(ciphertext)):
byte = keystreambyte()
deciphertext += chr(ciphertext[k] ^ byte)
print 'deciphertext:'
print deciphertext
转载请注明出处
浙公网安备 33010602011771号