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

使用Cryptodome.Cipher.AES对Python中的数据进行安全加密

发布时间:2024-01-13 03:40:41

Cryptodome.Cipher.AES是一个在Python中使用的加密算法库,它提供了高级加密标准(Advanced Encryption Standard,AES)的实现。AES是一种对称加密算法,用于保护数据的机密性。

在使用Cryptodome.Cipher.AES对数据进行加密前,我们需要安装Cryptodome库,可以通过以下命令进行安装:

pip install pycryptodomex

接下来,我们将演示如何使用Cryptodome.Cipher.AES对数据进行安全加密。下面是一个示例代码:

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

def encrypt_data(data, key):
    # 生成16位随机的IV向量
    iv = get_random_bytes(16)  
    cipher = AES.new(key, AES.MODE_CBC, iv)
    # 使用pkcs7padding进行填充
    encrypted_data = cipher.encrypt(pad(data, AES.block_size))
    return iv + encrypted_data

def decrypt_data(encrypted_data, key):
    iv = encrypted_data[:16]
    cipher = AES.new(key, AES.MODE_CBC, iv)
    # 使用unpad去除填充
    decrypted_data = unpad(cipher.decrypt(encrypted_data[16:]), AES.block_size)
    return decrypted_data

# 主函数
def main():
    # 明文数据
    data = b'This is a secret message.'
    # 随机生成一个256位(32字节)的密钥
    key = get_random_bytes(32)  
    # 使用密钥对数据进行加密
    encrypted_data = encrypt_data(data, key)
    print("加密后的数据:", encrypted_data)
    # 使用密钥对数据进行解密
    decrypted_data = decrypt_data(encrypted_data, key)
    print("解密后的数据:", decrypted_data.decode())

if __name__ == '__main__':
    main()

在上面的代码中,我们首先定义了一个encrypt_data函数和一个decrypt_data函数,用于加密和解密数据。encrypt_data函数接受待加密的数据和密钥作为参数,生成一个16字节的随机初始化向量(IV),然后使用AES算法和CBC模式创建一个加密对象。使用pkcs7padding对数据进行填充后,通过encrypt方法对数据进行加密,最后返回包含IV和加密数据的字节字符串。

decrypt_data函数接受加密数据和密钥作为参数,从加密数据中解析出初始化向量(IV),然后使用AES算法和CBC模式创建一个解密对象。通过decrypt方法对加密数据进行解密,最后使用unpad方法去除填充,返回解密后的数据。

在主函数中,我们定义了一个明文数据和一个256位的随机密钥。将明文数据使用密钥进行加密,并将加密后的数据打印出来。然后再使用密钥对加密后的数据进行解密,并将解密后的数据打印出来。

执行以上代码,你将看到类似以下的输出:

加密后的数据: b'\xc9\x15\xd8\x9e\x11\xa0%\x90^\xc4\x19\xbc\x15\xedR\x1c\x1f\xe8\x8d\x0b1\x08\x7fk\xf3\xaa\xc8\x94j\xedh~7\x84\xf2\xde \xfb\xb3U\xb3LQ\x1b\x9d\x0f\xe7\xf0\xf5\xa8\xbd\x93\xd336\xea\x90\xdeI\xac'
解密后的数据: This is a secret message.

这就是使用Cryptodome.Cipher.AES对数据进行安全加密的示例。加密后的数据只能通过相同的密钥进行解密,可确保数据的机密性和完整性。