Python_RC4Encode

Python RC4加密

什么是RC4

RC4是美国密码学家罗纳德·李维斯特(Ron Rivest)在1987年设计的密钥长度可变的流加密算法。它加解密使用相同的密钥,因此也属于对称加密算法。RC4是有线等效加密(WEP)中采用的加密算法,也曾经是TLS可采用的算法之一。由于RC4算法存在弱点,RFC 7465 规定禁止在TLS中使用RC4加密算法。

RC4由伪随机数生成器和异或运算组成。RC4的密钥长度可变,范围是[1,255]。RC4一个字节一个字节地加解密。给定一个密钥,伪随机数生成器接受密钥并产生一个S盒。S盒用来加密数据,而且在加密过程中S盒会变化。

由于异或运算的对合性,RC4加密解密使用同一套算法。
from RC4中文wiki

代码如下

#coding=utf-8

import sys,os,hashlib,time,base64
class rc4:

  def __init__(self,public_key = None):
    self.public_key = public_key or 'none_public_key'
    self.public_key = hashlib.md5(public_key).hexdigest()
  def encode(self,string):
    self.result = ''
    self.docrypt(string)
    self.result = base64.b32encode(self.result)
    return self.result

  def decode(self,string):
    self.result = ''
    string = base64.b32decode(string)
    self.docrypt(string)
    return self.result

  def docrypt(self,string):
    string_lenth = len(string)
    result = ''
    box = list(range(256))
    randkey = []
    key_lenth = len(self.public_key)

    for i in xrange(255):
      randkey.append(ord(self.public_key[i % key_lenth]))

    for i in xrange(255):
      j = 0
      j = (j + box[i] + randkey[i]) % 256
      tmp = box[i]
      box[i] = box[j]
      box[j] = tmp

    for i in xrange(string_lenth):
      a = j = 0
      a = (a + 1) % 256
      j = (j + box[a]) % 256
      tmp = box[a]
      box[a] = box[j]
      box[j] = tmp
      self.result += chr(ord(string[i]) ^ (box[(box[a] + box[j]) % 256]))

用例

测试代码

import rc4
_rc4 = rc4.rc4('iamthekey')
temp = _rc4.encode('HelloWorldTTT')
print temp
print _rc4.decode(temp)

输出

2AGVR5TFYCTFDU3CTWIKY===
HelloWorldTTT

你可能感兴趣的:(Python_RC4Encode)