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

使用Python和Crypto.Cipher.AES.MODE_CBC实现AES加密

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

AES(Advanced Encryption Standard)是一种对称加密算法,使用相同的密钥进行加密和解密操作。它是目前最常用的加密算法之一,常用于保护敏感数据的机密性。

在Python中,我们可以使用Crypto库的Cipher模块来实现AES加密。

首先,我们需要安装pycryptodome库,该库是pycrypto的一个改进版本。我们可以使用以下命令来安装它:

pip install pycryptodome

接下来,我们可以创建一个AESCipher类,用于封装AES加密的功能。下面是一个例子:

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

class AESCipher:
    def __init__(self, key):
        self.key = key

    def encrypt(self, data):
        cipher = AES.new(self.key, AES.MODE_CBC)
        ciphertext = cipher.encrypt(pad(data.encode(), AES.block_size))
        return ciphertext.hex()

    def decrypt(self, ciphertext):
        cipher = AES.new(self.key, AES.MODE_CBC)
        data = unpad(cipher.decrypt(bytes.fromhex(ciphertext)), AES.block_size)
        return data.decode()

# 示例使用
key = b'*密钥必须是16, 24或32字节长度*'
message = 'Hello, AES!'

# 创建AESCipher对象
cipher = AESCipher(key)

# 加密
encrypted_message = cipher.encrypt(message)
print('加密后的消息:', encrypted_message)

# 解密
decrypted_message = cipher.decrypt(encrypted_message)
print('解密后的消息:', decrypted_message)

在上述示例中,我们首先导入AESUtil.Padding模块。AES模块用于创建AES加密器对象,Util.Padding模块用于辅助我们进行数据的填充和反填充操作。

然后,我们创建了一个AESCipher类,该类接受一个密钥作为输入参数。在类的初始化方法中,我们保存了这个密钥。

encrypt方法使用AES.new函数创建了一个AES加密器对象,并指定了加密模式为AES.MODE_CBC(密码块链接模式)。然后,我们使用pad函数对输入数据进行填充,并调用加密器对象的encrypt方法进行加密。最后,我们将加密后的数据以十六进制字符串的形式返回。

decrypt方法与encrypt方法类似。我们使用AES.new函数创建了一个AES解密器对象,并指定了加密模式为AES.MODE_CBC。然后,我们使用bytes.fromhex函数将输入的十六进制字符串转换为字节串,并使用解密器对象的decrypt方法进行解密。最后,我们使用unpad函数进行反填充,并将解密后的数据以字符串形式返回。

在示例使用部分,我们创建了一个密钥和一个待加密的消息。然后,我们创建了一个AESCipher对象,并使用该对象进行加密和解密操作,并打印结果。

需要注意的是,密钥的长度必须是16、24或32字节。如果密钥的长度不符合要求,会抛出一个ValueError异常。

以上就是使用Python和Crypto.Cipher.AES.MODE_CBC实现AES加密的示例。使用该示例,您可以对文本数据进行加密和解密操作。请记得在实际应用中使用更加复杂和安全的密钥,并遵循 实践来确保数据的安全性。