python ECB加密封装
# -*- coding=utf-8 -*-
"""
需要安装
pycryptodome==3.18.0
"""
import base64
from Crypto.Cipher import AES
BLOCK_SIZE = 16 # Bytes
_pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * chr(BLOCK_SIZE - len(s) % BLOCK_SIZE).encode()
_unpad = lambda s: s[:-ord(s[len(s) - 1:])]
def ecb_encrypt(key, data):
'''
AES的ECB模式加密方法
:param key: 密钥
:param data:被加密字符串(明文)
:return:密文
'''
key = key.encode('utf8')
# 字符串补位
cipher = AES.new(key, AES.MODE_ECB)
# 切记要在此处编码,如果在此处不编码,有些中文或中文标点符号会报错
d = _pad(data.encode())
# 加密后得到的是bytes类型的数据,使用Base64进行编码,返回byte字符串
result = cipher.encrypt(d)
encodestrs = base64.b64encode(result)
enctext = encodestrs.decode('utf8')
return enctext
def ecb_decrypt(key, data):
'''
:param key: 密钥
:param data: 加密后的数据(密文)
:return:明文
'''
key = key.encode('utf8')
data = base64.b64decode(data)
cipher = AES.new(key, AES.MODE_ECB)
# 去补位
text_decrypted = _unpad(cipher.decrypt(data))
text_decrypted = text_decrypted.decode('utf8')
return text_decrypted
if __name__ == '__main__':
aes_key = 'testaaaaaaaaaaaa' # 需要16位
aes_data = 'xxzx'
ecdata = ecb_encrypt(aes_key, aes_data) # 加密
print(ecdata)
dcdata = ecb_decrypt(aes_key, ecdata) # 解密
print(dcdata)
执行结果:
qNcaCEE6cqoqRnNtqm9iWA==
xxzx