AES加密
注意:
1.密钥必须是16个字节,加密的文本必须是16字节的倍数。
2.加密的文本是str类型,得到的加密后的结果是bytes类型。
from Crypto.Cipher import AES # 加密
def encrypt(message): ''' 加密,密钥必须16个字节,加密的文本的字节数必须是16字节的倍数 :param message: :return: '''
# 用于加密的密钥,长度必须16个字节
key = b'xvfsdfdgaefsdfsd'
# 初始化加密器
cipher = AES.new(key,AES.MODE_CBC,key) # 将加密文本转为字节
ba_data = bytearray(message,encoding='utf-8') # 获取文本的字节数
l1 = len(ba_data) # 求余数,如果余数为0,即将16个字节加入到字节数组,如果余数不为0,将16-余数的字节加入到字节数组
rem = l1 % 16
if rem == 0: v1 = 16
else: v1 = 16 - rem for i in range(v1): ba_data.append(v1) # 将16倍数字节转化为字符串
final_data = ba_data.decode('utf-8') # 加密,加密文本必须是字符串,加密后得到字节类型的数据
msg = cipher.encrypt(final_data) return msg # bytes类型
'''测试''' a = encrypt("abc") print(a) # b'\xc2\xadL\xab\xef\xaa\xb1}\x92\xf22\x83L\xec\xf0\x90'
print(len(a)) # 16
AES解密
注意:
1.解密的文本必须是bytes类型,而且是16的倍数
2.解密后的结果是bytes类型,记得去除补全的字节,获取真正的数据
3.将数据转换为str类型
from Crypto.Cipher import AES # 解密
def decrypt(message): # 密钥,必须16个字节
key = b'xvfsdfdgaefsdfsd'
# 初始化加密器
cipher = AES.new(key,AES.MODE_CBC,key) # 解密,传入的必须是bytes类型,得到bytes类型的数据
result = cipher.decrypt(message) # 去除补全的字节,获取真正的加密内容
data = result[0:-result[-1]] # 转化为str类型
return str(data,encoding='utf-8') '''测试''' encrypt_msg = encrypt("abc") # b'\xc2\xadL\xab\xef\xaa\xb1}\x92\xf22\x83L\xec\xf0\x90'
decrypt_msg = decrypt(encrypt_msg) print(decrypt_msg) # abc