使用cryptography.hazmat.primitives.ciphers进行AES加密解密
发布时间:2023-12-16 08:32:50
使用cryptography库进行AES加密和解密,我们首先需要安装cryptography库,可以通过以下命令进行安装:
pip install cryptography
然后,我们可以使用cryptography.hazmat.primitives.ciphers模块来进行AES加密和解密。
下面是一个使用AES加密和解密的示例代码:
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import padding
import os
# 生成随机的16字节密钥
key = os.urandom(16)
# 生成随机的16字节初始向量
iv = os.urandom(16)
# 实例化一个AES加密算法对象
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
# 加密函数
def encrypt(plaintext):
# 创建一个加密器对象
encryptor = cipher.encryptor()
# 使用PKCS7填充方式进行填充
padder = padding.PKCS7(algorithms.AES.block_size).padder()
padded_data = padder.update(plaintext) + padder.finalize()
# 返回加密后的密文
return encryptor.update(padded_data) + encryptor.finalize()
# 解密函数
def decrypt(ciphertext):
# 创建一个解密器对象
decryptor = cipher.decryptor()
# 解密数据
decrypted_data = decryptor.update(ciphertext) + decryptor.finalize()
# 使用PKCS7填充方式进行去填充
unpadder = padding.PKCS7(algorithms.AES.block_size).unpadder()
plaintext = unpadder.update(decrypted_data) + unpadder.finalize()
# 返回解密后的明文
return plaintext
# 明文
plaintext = b"This is a secret message."
# 加密
ciphertext = encrypt(plaintext)
print("Encrypted ciphertext:", ciphertext)
# 解密
decrypted_text = decrypt(ciphertext)
print("Decrypted plaintext:", decrypted_text)
在上面的示例代码中,首先我们生成了一个16字节的随机密钥和一个16字节的随机初始向量。然后,我们使用这个密钥和初始向量实例化了一个AES加密算法对象。
加密函数encrypt中,我们首先创建了一个加密器对象encryptor,然后使用PKCS7填充方式进行填充,再进行加密得到密文。
解密函数decrypt中,我们首先创建了一个解密器对象decryptor,然后解密数据,再使用PKCS7填充方式进行去填充,最后得到明文。
最后,我们将明文加密得到的密文输出,并将密文解密得到的明文输出。
注意:在实际使用中,应该保证密钥的安全性,并选择合适的初始向量。此外,还需要确保明文和密文的编码方式一致。
