最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Python中实现的RC4算法

来源:动视网 责编:小采 时间:2020-11-27 14:40:16
文档

Python中实现的RC4算法

Python中实现的RC4算法:闲暇之时,用Python实现了一下RC4算法 编码 UTF-8 class 方式 #/usr/bin/python #coding=utf-8 import sys,os,hashlib,time,base64 class rc4: def __init__(self,public_key = None,ckey_lenth = 16)
推荐度:
导读Python中实现的RC4算法:闲暇之时,用Python实现了一下RC4算法 编码 UTF-8 class 方式 #/usr/bin/python #coding=utf-8 import sys,os,hashlib,time,base64 class rc4: def __init__(self,public_key = None,ckey_lenth = 16)


闲暇之时,用Python实现了一下RC4算法

编码 UTF-8

class 方式

#/usr/bin/python
#coding=utf-8

import sys,os,hashlib,time,base64
class 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-8

import sys,os,hashlib,time,base64

def 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)

文档

Python中实现的RC4算法

Python中实现的RC4算法:闲暇之时,用Python实现了一下RC4算法 编码 UTF-8 class 方式 #/usr/bin/python #coding=utf-8 import sys,os,hashlib,time,base64 class rc4: def __init__(self,public_key = None,ckey_lenth = 16)
推荐度:
标签: python 算法 RC4
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top