python3中安装Crypto进行aes加密解密

  • Post author:
  • Post category:python


python3中安装Crypto进行aes加密解密

  1. 安装

    在很久以前,crypto在python上面的名字是pycrypto它是一个第三方库,但是我看他的官方文档,最近的版本更新还是在2013年,这是真的年久失修,所以不建议安装这个库;

    那怎么办呢,查了一些资料发现可以pycryptodome
 pip install pycryptodome

但是,在使用的时候导包是有问题的,这个时候需要修改一个文件夹的名称才可以解决这个问题

将你使用的python版本site-packages中crypto改成Crypto就可以了

怎么说呢,要改文件名,这不是一个很好的事情,尽管这并不麻烦和复杂

但是对于大规模部署以及项目迁移试一个硬伤,也想过写一个shell脚本安装这个库,但是考虑到不同的项目使用的虚拟环境路径不同,所以也没有太大意义

也希望和大家交流一下这种问题解决方案

  1. 加密和解密
class AesCrypto():
    def __init__(self, key, model, iv, encode):
        self._encode = encode
        self.model = {'ECB': AES.MODE_ECB, 'CBC': AES.MODE_CBC}[model]
        self.key = self.add_16(key)
        # self.key1 = RSA.import_key(key)
        if model == 'ECB':
            self.aes = AES.new(self.key, self.model)  # 创建一个aes对象
        elif model == 'CBC':
            self.aes = AES.new(self.key, self.model, iv)  # 创建一个aes对象
        # 这里的密钥长度必须是16或32,这里使用16位的

    def add_16(self, par):
        # 转化
        par = par.encode(self.encode_)
        while len(par) % 16 != 0:
            par += b'\x00'
        return par

    def aesencrypt(self, text):
        # aes加密部分
        text = self.add_16(text)
        self.encrypt_text = self.aes.encrypt(text)
        return base64.encodebytes(self.encrypt_text).decode().strip()

    def aesdecrypt(self, text):
        # aes解密部分
        text = base64.decodebytes(text.encode(self.encode_))
        self.decrypt_text = self.aes.decrypt(text)
        try:
            data = json.dumps(self.decrypt_text.decode().strip(b'\x0e'.decode()))
        except Exception as e:
            # print(e)
            data = json.dumps(json.loads(self.decrypt_text)).strip(b'\x0e'.decode())
        return remove_control_chars(data)


def remove_control_chars(s):
    control_chars = ''.join(map(unichr, [i for i in range(0, 32)] + [i for i in range(127, 160)]))
    control_char_re = re.compile('[%s]' % re.escape(control_chars))
    return control_char_re.sub('', s)



版权声明:本文为weixin_43145985原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。