Python AES加密文件:完整指南及代码示例377


AES (Advanced Encryption Standard) 是一种广泛使用的对称密钥加密算法,其安全性高且效率好,因此被广泛应用于保护敏感数据,包括文件加密。 本文将详细介绍如何使用Python实现AES加密和解密文件,并提供完整的代码示例,涵盖文件处理、密钥管理以及异常处理等重要方面。 我们将会使用cryptography库,这是一个功能强大且安全的Python加密库。

首先,你需要安装cryptography库。 使用pip进行安装:pip install cryptography

接下来,我们将逐步讲解如何使用AES-256-CBC模式加密和解密文件。选择CBC模式是因为它是一种常用的分组密码模式,能够提供更强的安全性,避免一些仅使用ECB模式时可能出现的安全漏洞。

加密文件

加密文件需要以下步骤:生成密钥,创建初始化向量 (IV),打开文件读取数据,进行AES加密,最后将加密后的数据写入新的文件。from import Fernet
from import hashes
from .pbkdf2 import PBKDF2HMAC
from import default_backend
import os
def encrypt_file(input_filename, output_filename, password):
"""
使用AES-256-CBC加密文件。
Args:
input_filename: 待加密文件的路径。
output_filename: 加密后文件的路径。
password: 加密密码(字符串)。
"""
salt = (16) # 生成随机salt以增强安全性
kdf = PBKDF2HMAC(
algorithm=hashes.SHA256(),
length=32,
salt=salt,
iterations=100000,
backend=default_backend()
)
key = (()) # 从密码派生密钥
f = Fernet(key)
with open(input_filename, "rb") as file:
file_data = ()
encrypted_data = (file_data)
with open(output_filename, "wb") as file:
(salt) # 将salt写入文件开头
(encrypted_data)
print(f"文件 '{input_filename}' 已加密为 '{output_filename}'")

# 示例用法:
encrypt_file("", "", "mystrongpassword")

这段代码首先使用PBKDF2从密码派生出一个安全的密钥。 PBKDF2是一个密钥派生函数,它通过对密码进行多次迭代哈希来增强安全性。 然后,它使用Fernet类进行加密,Fernet在内部处理IV和AES-128-CBC加密。 重要的是,这段代码在加密文件开头保存了salt,解密时需要用到它。

解密文件

解密文件需要逆向执行上述步骤:读取salt和加密数据,从密码派生密钥,使用密钥和IV进行AES解密,最后将解密后的数据写入新文件。from import Fernet
from import hashes
from .pbkdf2 import PBKDF2HMAC
from import default_backend
import os
def decrypt_file(input_filename, output_filename, password):
"""
使用AES-256-CBC解密文件。
Args:
input_filename: 待解密文件的路径。
output_filename: 解密后文件的路径。
password: 解密密码(字符串)。
"""
with open(input_filename, "rb") as file:
salt = (16)
encrypted_data = ()
kdf = PBKDF2HMAC(
algorithm=hashes.SHA256(),
length=32,
salt=salt,
iterations=100000,
backend=default_backend()
)
key = (())
f = Fernet(key)
decrypted_data = (encrypted_data)
with open(output_filename, "wb") as file:
(decrypted_data)
print(f"文件 '{input_filename}' 已解密为 '{output_filename}'")

# 示例用法:
decrypt_file("", "", "mystrongpassword")

这段代码与加密代码类似,但它首先读取salt,然后使用相同的密码和salt派生密钥进行解密。

错误处理和安全性注意事项

实际应用中,需要添加更全面的错误处理,例如处理文件不存在、密码错误等情况。 此外,密码的安全性至关重要。 避免使用弱密码,并考虑使用更安全的密码管理方法。

记住,密钥的安全性决定了加密的安全性。 妥善保管你的密码,避免将其存储在容易被访问的地方。 对于高安全级别应用,可以考虑使用硬件安全模块 (HSM) 来存储和管理密钥。

这个例子使用了PBKDF2来从密码派生密钥。 迭代次数(iterations)越高,破解密钥所需的计算时间越长,安全性越高。 但是,迭代次数过高也会影响性能。 需要根据实际情况选择合适的迭代次数。

最后,请注意,这只是一个基本的示例。 在生产环境中,你需要根据具体需求进行调整和改进,并进行充分的安全性测试。

2025-07-05


上一篇:Python WebSocket高效文件传输:实现与优化

下一篇:Python高效文件比对:策略、算法与代码实现