Python中實(shí)現(xiàn)的RC4算法
閑暇之時(shí),用Python實(shí)現(xiàn)了一下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]))
測(cè)試:
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)
測(cè)試:
string = '我在這里呢,你在那里呢' print(string) str = rc4(string,'encode') print(str) rc = rc4(str,'decode') print(rc)
- RC4文件加密的python實(shí)現(xiàn)方法
- Python使用MD5加密字符串示例
- Python使用Pycrypto庫(kù)進(jìn)行RSA加密的方法詳解
- python使用rsa加密算法模塊模擬新浪微博登錄
- python實(shí)現(xiàn)RSA加密(解密)算法
- python字符串加密解密的三種方法分享(base64 win32com)
- python中base64加密解密方法實(shí)例分析
- python實(shí)現(xiàn)DES加密解密方法實(shí)例詳解
- python基于pyDes庫(kù)實(shí)現(xiàn)des加密的方法
- python RC4加密操作示例【測(cè)試可用】
相關(guān)文章
Python中Dataframe數(shù)據(jù)排序方法(含實(shí)例講解)
在進(jìn)行數(shù)據(jù)分析操作時(shí),經(jīng)常需要對(duì)數(shù)據(jù)按照某行某列排序,或者按照多行多列排序,以及按照索引值排序等等,下面這篇文章主要給大家介紹了關(guān)于Python中Dataframe數(shù)據(jù)排序方法的相關(guān)資料,需要的朋友可以參考下2023-02-02利用python爬取古詩(shī)文網(wǎng)中各類(lèi)古詩(shī)的方法
這篇文章主要介紹了利用python爬取古詩(shī)文網(wǎng)中各類(lèi)古詩(shī)的方法,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-03-03使用?OpenCV?開(kāi)發(fā)虛擬鍵盤(pán)的方法
OpenCV是一個(gè)強(qiáng)大的圖像處理工具,用于機(jī)器學(xué)習(xí)、圖像處理等的跨平臺(tái)開(kāi)源庫(kù),用于開(kāi)發(fā)實(shí)時(shí)計(jì)算機(jī)視覺(jué)應(yīng)用程序,本文重點(diǎn)給大家介紹使用?OpenCV?開(kāi)發(fā)虛擬鍵盤(pán)的方法,感興趣的朋友一起看看吧2021-11-11Python開(kāi)發(fā)的HTTP庫(kù)requests詳解
Requests是用Python語(yǔ)言編寫(xiě),基于urllib,采用Apache2 Licensed開(kāi)源協(xié)議的HTTP庫(kù)。它比urllib更加方便,可以節(jié)約我們大量的工作,完全滿(mǎn)足HTTP測(cè)試需求。Requests的哲學(xué)是以PEP 20 的習(xí)語(yǔ)為中心開(kāi)發(fā)的,所以它比urllib更加Pythoner。更重要的一點(diǎn)是它支持Python3哦!2017-08-08Python3的urllib.parse常用函數(shù)小結(jié)(urlencode,quote,quote_plus,unquot
這篇文章主要介紹了Python3的urllib.parse常用函數(shù),結(jié)合實(shí)例形式分析了urlencode,quote,quote_plus,unquote,unquote_plus等函數(shù)的相關(guān)使用技巧,需要的朋友可以參考下2016-09-09Python基礎(chǔ)之?dāng)?shù)據(jù)類(lèi)型知識(shí)匯總
今天帶大家復(fù)習(xí)一下Python基礎(chǔ)知識(shí),文中對(duì)數(shù)據(jù)類(lèi)型相關(guān)知識(shí)做了詳細(xì)的匯總,對(duì)剛?cè)腴T(mén)python的小伙伴很有幫助喲,需要的朋友可以參考下2021-05-05