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

使用Python进行AES加密:Crypto.Cipher.AES.MODE_CBC示例

发布时间:2023-12-11 07:16:29

在Python中,可以使用Crypto.Cipher模块中的AES类来进行AES加密操作。其中MODE_CBC是AES的一种加密模式之一。下面给出一个具体的使用示例。

首先,需要安装pycryptodome库,该库是Python中的一个加密库,可以用于AES加密。可以使用以下命令进行安装:

pip install pycryptodome

然后,我们可以通过以下代码示例使用AES.MODE_CBC模式进行AES加密和解密:

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

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

# 初始化AES加密器,使用MODE_CBC模式
cipher = AES.new(key, AES.MODE_CBC)

# 加密数据
data = b'This is a sample message.'
ct = cipher.encrypt(pad(data, AES.block_size))
print("加密后的数据:", ct)

# 解密数据
decrypt_cipher = AES.new(key, AES.MODE_CBC, cipher.iv)
pt = unpad(decrypt_cipher.decrypt(ct), AES.block_size)
print("解密后的数据:", pt)

运行上述代码,可以得到以下结果:

加密后的数据: b"\x84\xff\xa1\xda\xf5-.&\xdf\x1c\xd3Q\x82\xcf\xba\xe4\x8c[\xb8'\xe4\xea8(L\x80@OL\x1d\xdb"
解密后的数据: b'This is a sample message.'

首先,我们生成一个随机的128位密钥,然后使用AES.new()函数初始化了一个AES加密器cipher,指定了密钥和加密模式AES.MODE_CBC。使用pad()函数给明文数据添加了填充,然后使用encrypt()方法对明文进行加密,得到密文ct。通过打印ct可以看到,密文是以字节的形式表示的。

解密过程与加密过程类似,我们首先使用相同的密钥和加密模式初始化了一个解密器decrypt_cipher,然后使用decrypt()方法对密文进行解密,得到明文。最后使用unpad()函数去除填充,得到与原始明文一致的数据。

需要注意的是,AES要求数据的长度必须是分组长度的整数倍,因此在加密之前需要对数据进行填充,而解密之后需要去除填充。在上述示例中,我们使用了Crypto.Util.Padding模块中的pad()unpad()函数来进行填充和去除填充操作。

为了保证安全性,需要使用随机生成的密钥,并将该密钥妥善保管。在实际使用中,还可以将密钥保存到文件中,或者通过密钥交换算法安全地交换密钥。