使用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算法的要求。
