# 在使用 python3 做爬虫的时候,有时候遇到 AES 加密或解密,下面介绍一下常见的 ECBCBC 模式包括 base64 编码和 hex 编码

  1. # Crypto 安装

    pycryptopycrytodome 一个东西,前者最新版在 13 年更新的,对 windows 系统而言, python3 建议安装 pycryptodome ,用法和 pycrypto 一样

    pip install pycryptodome	# 支持 py2 和 py3
  2. # 使用 Crypto 实现 AES 加密解密

    • ECB 模式
    from Crypto.Cipher import AES
    # 我封装成了函数,也可以封装成类,看个人需求
    def aes_ECB(s, encry=True):
        """
        AES ECB加密
        :param s: 原始字符串
        :param encry: 
        		- 默认 True 加密
        		- False 解密
        :return: 加密 或者 解密后的字符串
        """
        key = "6HPjSZFH8RLv4dBj" 	# 密钥,根据实际情况赋值
        # 初始化 ECB 模式的实例
        aes = AES.new(key, AES.MODE_ECB)
        # 加密
        if encry:
            # 补位数,使原始字串为 block_size 的倍数 block_size 默认是 16
            count = len(s.encode('utf-8'))
            diff = AES.block_size - (count % AES.block_size)
            data = s + (chr(diff) * diff)
            ret = aes.encrypt(data.encode("utf8"))
            return base64.b64encode(ret).
        # 解密
        else:
            # 去除填充的字符
            unpad = lambda info: info[0:-ord(info[-1])]
            ret = base64.b64decode(s.encode("utf8"))
            return unpad(aes.decrypt(ret).decode("utf8"))
    • CBC 模式
    from Crypto.Cipher import AES
    def aes_CBC(s, encry=True):
        """
        AES CBC加密
        :param s: 原始字符串
        :param encry: 
        		- 默认 True 加密
        		- False 解密
        :return: 加密 或者 解密后的字符串
        """
        key = "6HPjSZFH8RLv4dBj"        # 密钥,根据实际情况赋值
        iv = "6HPjSZFH8RLv4dBj"         # 偏移量,根据实际情况赋值
        # 初始化 CBC 模式的实例
        cbc = AES.new(key, AES.MODE_CBC, iv)
        # 加密
        if encry:
            # 填充字符,使原始字串为 block_size 的倍数,block_size 默认是 16
            count = len(s.encode('utf-8'))
            diff = AES.block_size - (count % AES.block_size)
            data = s + (chr(diff) * diff)
            ret = cbc.encrypt(data)
            return base64.b64encode(ret)
        # 解密
        else:
            # 去除填充的字符
            unpad = lambda info: info[0:-ord(info[-1])]
            decryptByts = base64.b64decode(s)
            ret = cbc.decrypt(decryptByts)
            return unpad(ret)
  3. # 如果是 hex 格式,把 base64 换成下列函数加解密即可

    from binascii import a2b_hex, b2a_hex
    # b2a_hex 对应 b64encode 编码
    # a2b_hex 对应 b64decode 解码
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

渣渣文 微信支付

微信支付

渣渣文 支付宝

支付宝