加密

2020-03-11  本文已影响0人  叶叶阿姨

自己研究吧,这是同事发给我的一个方法 我项目需要用 ,我还没时间研究呢😂

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)

上一篇 下一篇

猜你喜欢

热点阅读