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

Python代码示例:使用Crypto.Cipher.AES.MODE_CBC加密数据

发布时间:2023-12-11 07:17:39

以下是一个使用Crypto.Cipher.AES.MODE_CBC模式对数据进行加密和解密的Python代码示例:

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

def encrypt_data(key, data):
    cipher = AES.new(key, AES.MODE_CBC)
    iv = cipher.iv
    encrypted_data = cipher.encrypt(data)
    return iv + encrypted_data

def decrypt_data(key, encrypted_data):
    iv = encrypted_data[:AES.block_size]
    cipher = AES.new(key, AES.MODE_CBC, iv=iv)
    decrypted_data = cipher.decrypt(encrypted_data[AES.block_size:])
    return decrypted_data.rstrip(b'\x00')

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

# 输入要加密的数据
data = input("输入要加密的数据: ").encode()

# 加密数据
encrypted_data = encrypt_data(key, data)
print("加密后的数据:", encrypted_data.hex())

# 解密数据
decrypted_data = decrypt_data(key, encrypted_data)
print("解密后的数据:", decrypted_data.decode())

该代码使用了Crypto.Cipher.AES模块的MODE_CBC模式进行加密和解密。首先,通过get_random_bytes(16)函数生成一个随机的128位密钥。然后,定义了一个encrypt_data函数来对数据进行加密,该函数接收密钥和要加密的数据作为参数。在函数内部,使用AES.new(key, AES.MODE_CBC)创建一个加密器对象,然后通过cipher.iv获取随机生成的初始化向量(IV),并将其拼接到加密后的数据中。最后,返回加密后的数据。

接下来,定义了一个decrypt_data函数来对数据进行解密,该函数接收密钥和已加密的数据作为参数。在函数内部,首先从加密数据中提取出初始化向量(IV)和通过AES.new(key, AES.MODE_CBC, iv=iv)创建一个解密器对象。然后,使用解密器对加密数据进行解密操作,并通过rstrip(b'\x00')去除解密后的数据中的填充字符。最后,返回解密后的数据。

在代码的最后,用户可以输入要加密的数据,然后调用encrypt_data函数对数据进行加密,并打印出加密后的数据。然后调用decrypt_data函数对加密数据进行解密,并打印出解密后的数据。

请注意,该代码示例仅用于演示如何使用Crypto.Cipher.AES.MODE_CBC模式进行加密和解密。在实际使用中,需要根据具体需求进行更多的安全性考虑,如密钥的生成和管理、初始向量的使用、填充方式的选择等。