Bootstrap

python3 BASE64AES加密模式ECB/CBC

因为需要对接第三方api,第三方也没有加密/解密demo只能空手撸一下

源码如下:

# -*- coding: utf-8 -*-
from Crypto.Cipher import AES
import base64


class aescrypt():
    # 初始化对象
    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)
        # CBC加密需要初始化向量IV,必须是16位,ECB模式不需要。
        self.iv = iv.encode()
        if model == 'ECB':
            self.aes = AES.new(self.key, self.model)
        elif model == 'CBC':
            self.aes = AES.new(self.key, self.model, self.iv)

    # 秘钥长度必须为16、24、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):
        text = self.add_16(text)
        self.encrypt_text = self.aes.encrypt(text)
        return base64.encodebytes(self.encrypt_text).decode().strip()

    # 解密
    def aesdecrypt(self, text):
        ''' 两种解密方式不通用 '''
        if self.model == AES.MODE_CBC:
            self.aes = AES.new(self.key, self.model, self.iv)
            text = base64.decodebytes(text.encode(self.encode_))
            self.decrypt_text = self.aes.decrypt(text)
            return self.decrypt_text.decode(self.encode_).strip('\0')
        elif self.model == AES.MODE_ECB:
            text = base64.decodebytes(text.encode(self.encode_))
            self.decrypt_text = self.aes.decrypt(text)
            return self.decrypt_text.decode(self.encode_).strip('\0')


if __name__ == '__main__':
    key = '0123456789123456'  # 秘钥
    text = '姓名'#请求的文本
    # ECB
    pattern_ecb = aescrypt(key, 'ECB', '', 'utf8')#第一个参数为秘钥 第二参数为加密模式 第三个空 第四个你懂不解析
    en_text = pattern_ecb.aesencrypt(text)#text就是你要加密的内容
    print('ECB加密模式密文:', en_text)
    data = pattern_ecb.aesdecrypt(en_text)
    print('ECB加密模式明文:', data)

    # CBC  需要初始化向量IV
    IV = key[0:16] #偏移量 16 位!!
    pattern_cbc = aescrypt(key, 'CBC', IV, 'utf8') #第一个参数为秘钥 第二参数为加密模式 第三个为偏移量 第四个你懂得不解释
    cbc_text = pattern_cbc.aesencrypt(text)#text就是你要加密的内容
    print('CBC加密模式密文:', cbc_text)
    cbc_data = pattern_cbc.aesdecrypt(cbc_text)
    print('CBC加密模式密文:', cbc_data)

'''  
	两种加密模式的输出为以下的结果

	ECB加密模式密文:  oYn5Tj9A1NwIUNTtZu2b3w==
	ECB加密模式明文: 姓名

	CBC加密模式密文: eKCd3LH71eb+kv/UqczWHQ==
	CBC加密模式密文: 姓名
'''

可以根据自己的业务再进行写自己的逻辑

;