#!/usr/bin/python3
# -*- coding:utf-8 -*-
from Cryptodome.Cipher import AES
from binascii import b2a_hex, a2b_hex
# AES加密秘钥
AES_CRYPTO_KEY = "AIoT_DMS-LJG"
DEFAULT_USER_PWD = "123456"
def add_to_16(pad_text):
if len(pad_text.encode('utf-8')) % 16:
add = 16 - (len(pad_text.encode('utf-8')) % 16)
else:
add = 0
pad_text += '\0' * add
return pad_text.encode('utf-8')
def encrypt(encrypt_str, key=AES_CRYPTO_KEY):
key_16 = add_to_16(key)
#字符串转bytes且为16倍数个
text_16 = add_to_16(encrypt_str)
aes = AES.new(key_16, AES.MODE_CBC, key_16)
cipher_text = aes.encrypt(text_16)
# bytes转为字符串
return str(b2a_hex(cipher_text),encoding="utf8")
def decrypt(decrypt_str, key=AES_CRYPTO_KEY):
#字符串转为bytes
decrypt_str_b = bytes(decrypt_str, encoding="utf8")
key_16 = add_to_16(key)
aes = AES.new(key_16, AES.MODE_CBC, key_16)
plain_text = aes.decrypt(a2b_hex(decrypt_str_b))
# 解密后,去掉补足的空格用strip() 去掉
return bytes.decode(plain_text).rstrip('\0')
if __name__ == '__main__':
text = "123456"
e = encrypt(text) # 加密
d = decrypt(e) # 解密
print('原文:' + text)
print('密文:' + e)
print('长度:' + str(len(e)))
print('解密:' + d)
if text == d:
print('解密结果:ok')
else:
print('解密结果:fail')
结果如下: