香港云主机最佳企业级服务商!

ADSL拨号VPS包含了中国大陆(联通,移动,电信,)

中国香港,国外拨号VPS。

当前位置:云主机 > python >

电信ADSL拨号VPS
联通ADSL拨号VPS
移动ADSL拨号VPS

Python中实现的RC4算法


时间:2021-11-09 10:27 作者:admin610456


闲暇之时,用python/' target='_blank'>python实现了一下RC4算法

编码 UTF-8

class 方式

#/usr/bin/Python#coding=utf-8import sys,os,hashlib,time,base64class rc4:  def __init__(self,public_key = None,ckey_lenth = 16):    self.ckey_lenth = ckey_lenth    self.public_key = public_key or 'none_public_key'    key = hashlib.md5(self.public_key).hexdigest()    self.keya = hashlib.md5(key[0:16]).hexdigest()    self.keyb = hashlib.md5(key[16:32]).hexdigest()    self.keyc = ''  def encode(self,string):    self.keyc = hashlib.md5(str(time.time())).hexdigest()[32 - self.ckey_lenth:32]    string = '0000000000' + hashlib.md5(string + self.keyb).hexdigest()[0:16] + string    self.result = ''    self.docrypt(string)    return self.keyc + base64.b64encode(self.result)  def decode(self,string):    self.keyc = string[0:self.ckey_lenth]    string = base64.b64decode(string[self.ckey_lenth:])    self.result = ''    self.docrypt(string)    result = self.result    if (result[0:10] == '0000000000' or int(result[0:10]) - int(time.time()) > 0) and result[10:26] == hashlib.md5(result[26:] + self.keyb).hexdigest()[0:16]:      return result[26:]    else:      return None  def docrypt(self,string):    string_lenth = len(string)    result = ''    box = list(range(256))    randkey = []    cryptkey = self.keya + hashlib.md5(self.keya + self.keyc).hexdigest()    key_lenth = len(cryptkey)    for i in xrange(255):      randkey.append(ord(cryptkey[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]))

测试:

rc = rc4('nishidahuaidan')string = '我在这里呢,你在那里呢'print(string)str = rc.encode(string)print(str)str = rc.decode(str)print(str)

function方式

#/usr/bin/python#coding=utf-8import sys,os,hashlib,time,base64def rc4(string, op = 'encode', public_key = 'ddd', expirytime = 0):  ckey_lenth = 4  public_key = public_key and public_key or ''  key = hashlib.md5(public_key).hexdigest()  keya = hashlib.md5(key[0:16]).hexdigest()  keyb = hashlib.md5(key[16:32]).hexdigest()  keyc = ckey_lenth and (op == 'decode' and string[0:ckey_lenth] or hashlib.md5(str(time.time())).hexdigest()[32 - ckey_lenth:32]) or ''  cryptkey = keya + hashlib.md5(keya + keyc).hexdigest()  key_lenth = len(cryptkey)  string = op == 'decode' and base64.b64decode(string[4:]) or '0000000000' + hashlib.md5(string + keyb).hexdigest()[0:16] + string  string_lenth = len(string)  result = ''  box = list(range(256))  randkey = []  for i in xrange(255):    randkey.append(ord(cryptkey[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    result += chr(ord(string[i]) ^ (box[(box[a] + box[j]) % 256]))  if op == 'decode':    if (result[0:10] == '0000000000' or int(result[0:10]) - int(time.time()) > 0) and result[10:26] == hashlib.md5(result[26:] + keyb).hexdigest()[0:16]:      return result[26:]    else:      return None  else:    return keyc + base64.b64encode(result)

测试:

string = '我在这里呢,你在那里呢'print(string)str = rc4(string,'encode')print(str)rc = rc4(str,'decode')print(rc)

(责任编辑:admin)






帮助中心
会员注册
找回密码
新闻中心
快捷通道
域名登录面板
虚机登录面板
云主机登录面板
关于我们
关于我们
联系我们
联系方式

售前咨询:17830004266(重庆移动)

企业QQ:383546523

《中华人民共和国工业和信息化部》 编号:ICP备00012341号

Copyright © 2002 -2018 香港云主机 版权所有
声明:香港云主机品牌标志、品牌吉祥物均已注册商标,版权所有,窃用必究

云官方微信

在线客服

  • 企业QQ: 点击这里给我发消息
  • 技术支持:383546523

  • 公司总台电话:17830004266(重庆移动)
  • 售前咨询热线:17830004266(重庆移动)