from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import pad, unpad
# 生成一个随机的16字节密钥
key = get_random_bytes(16)
# 创建AES加密器对象,使用CBC模式
cipher = AES.new(key, AES.MODE_CBC)
# 要加密的数据(必须是16字节的倍数)
data = b'This is a secret message'
# 使用PKCS7填充方式将数据填充到16字节的倍数
padded_data = pad(data, AES.block_size)
# 加密数据
ciphertext = cipher.encrypt(padded_data)
# 输出加密后的数据和初始化向量(IV)
print("Ciphertext:", ciphertext.hex())
print("IV:", cipher.iv.hex())
# 解密数据
decipher = AES.new(key, AES.MODE_CBC, cipher.iv)
unpadded_data = unpad(decipher.decrypt(ciphertext), AES.block_size)
# 输出解密后的数据
print("Decrypted data:", unpadded_data.decode('utf-8'))
Crypto.Cipher
模块中的 AES
类来进行加密和解密操作。Crypto.Random
用于生成随机密钥,Crypto.Util.Padding
用于数据填充。get_random_bytes(16)
生成一个16字节的随机密钥。AES.new()
方法创建一个AES加密器对象,指定密钥和模式(这里使用CBC模式)。pad()
函数对数据进行填充。encrypt()
方法对填充后的数据进行加密,并输出加密后的密文和初始化向量(IV)。decrypt()
方法解密密文,并使用 unpad()
函数去除填充。希望这段代码和解释对你有所帮助!
下一篇:python判断空值
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站