欢迎访问宙启技术站
智能推送

使用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填充方式进行去填充,最后得到明文。

最后,我们将明文加密得到的密文输出,并将密文解密得到的明文输出。

注意:在实际使用中,应该保证密钥的安全性,并选择合适的初始向量。此外,还需要确保明文和密文的编码方式一致。