因为需要对接第三方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加密模式密文: 姓名
'''
可以根据自己的业务再进行写自己的逻辑