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

Java方法队列执行:高效处理异步任务的多种策略
https://www.shuihudhg.cn/124295.html

Troubleshooting and Solutions for C Language Output Encoding Issues (English)
https://www.shuihudhg.cn/124294.html

Python爬取服装电商数据:实战指南与技巧
https://www.shuihudhg.cn/124293.html

PHP数据库连接与操作详解:MySQL篇
https://www.shuihudhg.cn/124292.html

PHP数据库应用开发详解:从入门到进阶
https://www.shuihudhg.cn/124291.html
热门文章

Python 格式化字符串
https://www.shuihudhg.cn/1272.html

Python 函数库:强大的工具箱,提升编程效率
https://www.shuihudhg.cn/3366.html

Python向CSV文件写入数据
https://www.shuihudhg.cn/372.html

Python 静态代码分析:提升代码质量的利器
https://www.shuihudhg.cn/4753.html

Python 文件名命名规范:最佳实践
https://www.shuihudhg.cn/5836.html