2021-04-05 python实现AES加密

import binascii
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad

key = b"1234123412ABCDEF"
iv = b"ABCDEF1234123412"
data = b"zhiliao"


def encrypt():
    # 参数key: 秘钥,要求是bytes类型,并且长度必须是16、24或32 bytes,因为秘钥的长度可以为:128位、192位、256位
    # 参数mode: 加密的模式,有ECB、CBC等等,最常用的是CBC
    # 参数iv: 初始向量,是CBC加密模式需要的初始向量,类似于加密算法中的盐
    # 创建用于加密的AES对象
    cipher1 = AES.new(key, AES.MODE_CBC, iv)
    # 使用对象进行加密,加密的时候,需要使用pad对数据进行填充,因为加密的数据要求必须是能被128整除
    # pad参数内容,第一个是待填充的数据,第二个是填充成多大的数据,需要填充成128位即16bytes
    ct = cipher1.encrypt(pad(data, 16))
    # 将加密后的结果(二进制)转换成十六进制的或者其它形式
    ct_hex = binascii.b2a_hex(ct)
    return ct_hex


def decrypt(ct_hex):
    # 创建用于解密的AES对象
    cipher2 = AES.new(key, AES.MODE_CBC, iv)
    # 将十六进制的数据转换成二进制
    hex_data = binascii.a2b_hex(ct_hex)
    # 解密完成后,需要对数据进行取消填充,获取原来的数据
    pt = unpad(cipher2.decrypt(hex_data), 16)
    return pt


if __name__ == '__main__':
    print("原始数据:",data)
    enc_data = encrypt()
    print("加密后的数据:",enc_data)
    dec_data = decrypt(enc_data)
    print("解密后的数据:", dec_data)

输出结果

原始数据: b'zhiliao'
加密后的数据: b'e376c278392567b329e3f9dea06abe14'
解密后的数据: b'zhiliao'

你可能感兴趣的:(2021-04-05 python实现AES加密)