cornsea

流加密算法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

posted on 2010-06-20 12:15  cornsea  阅读(1416)  评论(0)    收藏  举报

导航