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

使用Python和Crypto.Cipher.AES.MODE_CBC进行AES加密解密

发布时间:2023-12-11 07:20:04

AES(Advanced Encryption Standard)是一种对称加密算法,被广泛应用于数据保护和加密通信领域。在Python中,我们可以使用Crypto.Cipher.AES.MODE_CBC模块对数据进行AES加密和解密。

首先,我们需要安装pycryptodome库,它是Python中 的密码学库之一。你可以使用以下命令来安装它:

pip install pycryptodome

接下来,我们将使用以下代码,演示如何使用Crypto.Cipher.AES.MODE_CBC进行AES加密和解密:

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes

def aes_encrypt(key, plaintext):
    cipher = AES.new(key, AES.MODE_CBC)
    ciphertext = cipher.encrypt(pad(plaintext.encode(), AES.block_size))
    return ciphertext

def aes_decrypt(key, ciphertext):
    cipher = AES.new(key, AES.MODE_CBC)
    plaintext = unpad(cipher.decrypt(ciphertext), AES.block_size)
    return plaintext.decode()

# 生成一个16字节的随机密钥
key = get_random_bytes(16)

# 加密示例
plaintext = "Hello, AES!"
ciphertext = aes_encrypt(key, plaintext)

# 解密示例
decrypted_text = aes_decrypt(key, ciphertext)

# 打印加密和解密结果
print("Plaintext: ", plaintext)
print("Ciphertext: ", ciphertext)
print("Decrypted text: ", decrypted_text)

在上面的例子中,我们首先生成一个由16个字节组成的随机密钥,然后使用aes_encrypt函数对明文进行加密,并使用aes_decrypt函数对密文进行解密。最后,我们打印了加密和解密的结果。

需要注意的是,AES加密算法要求明文的长度必须是16的倍数。因此,我们使用Crypto.Util.Padding模块的pad函数对明文进行填充,在解密时使用unpad函数进行去填充。

总结起来,我们可以使用Crypto.Cipher.AES.MODE_CBC模块对数据进行AES加密和解密。通过随机生成的密钥,我们可以确保安全性,并使用填充函数来满足AES算法的要求。