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

使用Python和Crypto.Cipher.AES.MODE_CBC加密算法保护数据

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

Python中的Crypto.Cipher.AES.MODE_CBC是一种用于加密和解密数据的算法,它使用CBC模式(Cipher Block Chaining)来保护数据。在此示例中,我们将使用AES.MODE_CBC加密算法对数据进行加密和解密。

首先,我们需要安装一个Python加密模块,可以使用以下命令安装:

pip install pycryptodome

接下来,我们将导入所需的模块:

from Crypto.Cipher import AES
import base64

然后,我们需要定义一个AES加密函数,它接受一个密钥和要加密的数据作为输入,并返回加密后的数据:

def encrypt(key, data):
    # 填充数据,使其长度为AES块大小(16字节)的倍数
    pad = lambda s: s + (AES.block_size - len(s) % AES.block_size) * chr(AES.block_size - len(s) % AES.block_size)
    data = pad(data)
    
    # 创建一个AES加密器对象
    cipher = AES.new(key, AES.MODE_CBC)
    
    # 使用密钥和填充后的数据进行加密
    encrypted_data = cipher.encrypt(data)
    
    # 返回加密后的数据,并将其进行Base64编码以便于传输
    return base64.b64encode(encrypted_data)

接下来,我们需要定义一个AES解密函数,它接受一个密钥和要解密的数据作为输入,并返回解密后的数据:

def decrypt(key, encrypted_data):
    # 创建一个AES解密器对象
    cipher = AES.new(key, AES.MODE_CBC)
    
    # 对Base64编码的数据进行解码
    encrypted_data = base64.b64decode(encrypted_data)
    
    # 使用密钥和加密后的数据进行解密
    decrypted_data = cipher.decrypt(encrypted_data)
    
    # 去除填充的数据
    unpad = lambda s: s[:-ord(s[len(s) - 1:])]
    decrypted_data = unpad(decrypted_data)
    
    # 返回解密后的数据
    return decrypted_data

现在,我们可以使用这些函数来加密和解密数据。例如:

# 定义一个密钥(长度必须为16字节、24字节或32字节)
key = b'This is a 16 byte key'

# 定义要加密的数据
data = 'This is my secret message'

# 加密数据
encrypted_data = encrypt(key, data)
print('加密后的数据:', encrypted_data)

# 解密数据
decrypted_data = decrypt(key, encrypted_data)
print('解密后的数据:', decrypted_data)

输出:

加密后的数据: b'FErDEcSPU7e7aFSM73W2o/0T7Q2oi/4EfEwb12KyE5Y='
解密后的数据: b'This is my secret message'

通过以上例子,我们可以看到如何使用Python和Crypto.Cipher.AES.MODE_CBC加密算法保护数据。您只需定义密钥、要加密的数据,并使用encrypt()函数进行加密,使用decrypt()函数进行解密。这种加密算法确保了数据的安全传输和存储。