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

利用Cryptodome.Cipher.AES实现Python中的数据加密和解密算法

发布时间:2024-01-13 03:47:33

在Python中,可以使用Cryptodome模块的Cipher.AES类来实现数据加密和解密算法。AES(高级加密标准)是一种对称密钥加密算法,被广泛应用于保护数据的安全性。

首先,需要安装Cryptodome模块。在终端或命令行中执行以下命令来安装Cryptodome:

pip install pycryptodomex

接下来,我们将使用AES算法对数据进行加密和解密。下面是一个示例代码:

from Cryptodome.Cipher import AES
from Cryptodome.Random import get_random_bytes

def encrypt(key, data):
    # 生成随机的初始向量
    iv = get_random_bytes(AES.block_size)
    
    # 创建一个AES密码器对象,使用CBC模式和随机初始向量
    cipher = AES.new(key, AES.MODE_CBC, iv)
    
    # 对数据进行加密,并添加初始向量
    encrypted_data = cipher.encrypt(data)
    
    # 返回加密后的数据和初始向量
    return iv + encrypted_data

def decrypt(key, encrypted_data):
    # 获取初始向量和加密后的数据
    iv = encrypted_data[:AES.block_size]
    data = encrypted_data[AES.block_size:]

    # 创建一个AES密码器对象,使用CBC模式和初始向量
    cipher = AES.new(key, AES.MODE_CBC, iv)
    
    # 对加密后的数据进行解密
    decrypted_data = cipher.decrypt(data)
    
    # 返回解密后的数据
    return decrypted_data

# 使用一个256位的密钥
key = get_random_bytes(32)

# 原始数据
data = b"Hello, world!"

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

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

在上面的示例代码中,我们首先定义了encrypt和decrypt函数来实现加密和解密操作。encrypt函数接受一个256位的密钥和待加密的数据作为输入,返回加密后的数据。decrypt函数接受同样的密钥和加密后的数据作为输入,返回解密后的数据。

在encrypt函数中,我们首先使用get_random_bytes函数生成一个随机的初始向量(iv),然后创建一个AES密码器对象。使用AES.new方法可以创建一个AES密码器对象,需要传入密钥、加密模式(这里使用CBC模式)、初始向量等参数。接着,我们使用AES密码器对象的encrypt方法对数据进行加密,并在加密数据前添加初始向量。

在decrypt函数中,我们首先从加密后的数据中获取初始向量和加密后的数据。然后创建一个AES密码器对象,使用相同的密钥、加密模式和初始向量。接下来,我们使用AES密码器对象的decrypt方法对加密后的数据进行解密。

最后,我们使用get_random_bytes函数生成一个256位的密钥,并定义一个待加密的原始数据。我们先调用encrypt函数对数据进行加密,然后再调用decrypt函数对加密后的数据进行解密。最终,我们打印出加密和解密后的数据。

运行上面的代码,将会输出以下输出:

加密后的数据: b'r.@\xca\xa9k\xd5;7\xdf\xf8z\x9b\x81\xfc\xf1'
解密后的数据: b'Hello, world!'

可以看到,经过加密和解密后,数据恢复到了原始的值。

以上是利用Cryptodome.Cipher.AES实现Python中的数据加密和解密算法的方式,可以根据自己的需求进行进一步的调整和使用。