如何在 Python 中使用 AES 256 位加密算法加密数据
要在 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"。
相关文章