Python AES CBC 加密解密
import base64
import cv2
import numpy as np
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import json
def cv2bytes(im):
'''cv2转二进制图片
:param im: cv2图像,numpy.ndarray
:return: 二进制图片数据,bytes
'''
return np.array(cv2.imencode('.png', im)[1]).tobytes()
class AESUtilECB:
def __init__(self, key):
self.pad_length = AES.block_size
self.key = key
def encryt(self, data):
"""
:param data: 二进制图片数据
:return: 经过aes加密和base64编码后的图像数据
"""
data = data.encode('utf-8')
cipher = AES.new(self.key.encode('utf-8'), AES.MODE_ECB,)
data = pad(data, 16, style='pkcs7')
# data = data.encode('utf-8')
msg = cipher.encrypt(data)
msg = base64.b64encode(msg)
msg = msg.decode('utf-8')
return msg
def decrypt(self, enStr):
cipher = AES.new(self.key.encode('utf-8'), AES.MODE_ECB, )
decryptByts = base64.b64decode(enStr)
msg = cipher.decrypt(decryptByts)
msg = msg.strip(b'\x0f')
return msg.decode('utf-8')
class AESUtilCBC:
def __init__(self, key, iv):
self.pad_length = AES.block_size
self.key = key
self.iv = iv
def encryt(self, data):
"""
:param data: 二进制图片数据
:return: 经过aes加密和base64编码后的图像数据
"""
data = data.encode('utf-8')
cipher = AES.new(self.key.encode('utf-8'), AES.MODE_CBC, self.iv.encode('utf-8'))
data = pad(data, 16, style='pkcs7')
# data = data.encode('utf-8')
msg = cipher.encrypt(data)
msg = base64.b64encode(msg)
msg = msg.decode('utf-8')
return msg
def decrypt(self, enStr):
cipher = AES.new(self.key.encode('utf-8'), AES.MODE_CBC, self.iv.encode('utf-8') )
decryptByts = base64.b64decode(enStr)
msg = cipher.decrypt(decryptByts)
msg = msg.strip(b'\x0f')
return msg.decode('utf-8')
if __name__ == "__main__":
text = "{\"token\":\"0e84b297-d8f2-4779-b7f1-60966ed19ce1\"}"
# text = json.dumps({"token":"0e84b297-d8f2-4779-b7f1-60966ed19ce1"})
key = "DigiDigiDigiDigi"
iv = "1234567887654321"
aes = AESUtilCBC(key,iv)
encrypt_res = aes.encryt(text)
print(encrypt_res)
decrypt_res = aes.decrypt(encrypt_res)
print(decrypt_res)
输出结果
text {"token":"0e84b297-d8f2-4779-b7f1-60966ed19ce1"}
encrypt_res NVyP1JRriAErG7oHVNAAvSHcaUl/DnBLpHaWRSTX+ou8edvMnzF6aMiQyLukPbFUAAsXSR3EMo068sOYJMVnZw==
decrypt_res {"token":"0e84b297-d8f2-4779-b7f1-60966ed19ce1"}