自己研究吧,这是同事发给我的一个方法 我项目需要用 ,我还没时间研究呢😂
from threading import Thread
from time import sleep
import base64
import random
class MySecretKey(object):
'''
此类是通过自己生成随机的ascii编码对应关系
来进行加密和解密
'''
def __init__(self):
self.encrypt_relieve = None
self.__start_generating_keys()
def __start_generating_keys(self):
'''
开启生成密钥线程
'''
th = Thread(target=self.__generate_the_key)
th.setDaemon = True
th.start()
def __generate_the_key(self):
'''
生成加密和解密关系字典
'''
while True:
ASC = [i for i in range(48, 58)]
ASC += [i for i in range(65, 91)]
ASC += [i for i in range(97, 123)]
# 特殊符号
SPECIAL_ASC = [37, 45, 46, 47, 95, 96]
encrypt = {}
relieve = {}
special_relieve = {}
asc_copy = ASC.copy()
for i in ASC:
s = random.choices(asc_copy)
asc_copy.remove(s[0])
encrypt[chr(i)] = chr(s[0])
relieve[chr(s[0])] = chr(i)
for index, i in enumerate(SPECIAL_ASC):
special_code = encrypt[list(encrypt.keys())[index]]
special_code = '{}|{}'.format(special_code, special_code)
encrypt[chr(i)] = special_code
special_relieve[special_code] = chr(i)
self.encrypt_relieve = {
'encrypt': encrypt, 'relieve': relieve, 'special_relieve': special_relieve}
sleep(86400)
def encrypt(self, string):
'''
为字符串加密
'''
string = ''.join([self.encrypt_relieve['encrypt'][i] for i in string])
return base64.b64encode(string.encode("utf-8")).decode("utf-8")
def relieve(self, string):
'''
为字符串解密
'''
string = base64.b64decode(string.encode("utf-8")).decode("utf-8")
for code in self.encrypt_relieve['special_relieve']:
string = string.replace(code, self.encrypt_relieve['special_relieve'][code])
# 先给特殊符号解密
new_string = []
for str_ in string:
if str_ in self.encrypt_relieve['relieve']:
str_ = self.encrypt_relieve['relieve'][str_]
new_string.append(str_)
return ''.join(new_string)
网友评论