AES加密解密


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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM