如何在 Python 中使用 AES 256 位加密算法加密数据

2023-03-27 00:00:00 数据 加密 加密算法

要在 Python 中使用 AES 256 位加密算法加密数据,您可以使用 PyCryptodome 库。以下是一个详细的示例:

首先,安装 PyCryptodome 库,可以使用 pip 命令进行安装:

pip install pycryptodome

然后,导入所需的模块:

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

接下来,定义一个函数来加密数据。该函数接受三个参数:密钥、原始数据和加密后的数据文件名。在本例中,我们将使用 256 位密钥(即 32 字节)。

def encrypt_data(key, data, filename):
    # 生成 16 字节的初始化向量
    iv = get_random_bytes(16)

    # 创建一个 AES 加密器对象
    cipher = AES.new(key, AES.MODE_CBC, iv)

    # 填充数据以匹配 AES 块大小(16 字节)
    padded_data = data + b"\0" * (AES.block_size - len(data) % AES.block_size)

    # 加密数据
    encrypted_data = cipher.encrypt(padded_data)

    # 将初始化向量和加密后的数据保存到文件中
    with open(filename, "wb") as f:
        f.write(iv)
        f.write(encrypted_data)

现在,您可以使用上述函数来加密数据。以下是一个示例:

key = b'this_is_a_32_byte_long_key_for_AES256'
data = b'pidancode.com'
filename = 'encrypted_data.bin'

encrypt_data(key, data, filename)

这将生成一个名为 encrypted_data.bin 的文件,其中包含初始化向量和加密后的数据。

如果要解密数据,可以使用以下代码:

def decrypt_data(key, filename):
    # 从文件中读取初始化向量和加密后的数据
    with open(filename, "rb") as f:
        iv = f.read(16)
        encrypted_data = f.read()

    # 创建一个 AES 解密器对象
    cipher = AES.new(key, AES.MODE_CBC, iv)

    # 解密数据
    decrypted_data = cipher.decrypt(encrypted_data)

    # 去除填充的字节
    unpadded_data = decrypted_data.rstrip(b"\0")

    return unpadded_data

以下是一个解密数据的示例:

key = b'this_is_a_32_byte_long_key_for_AES256'
filename = 'encrypted_data.bin'

decrypted_data = decrypt_data(key, filename)

print(decrypted_data)  # b'pidancode.com'

这将输出原始数据 "pidancode.com"。

相关文章