
资料内容:
在数字时代,数据安全变得愈发重要。文件加密是一种常见的保护数据安全的方法。通过加 
密文件,可以防止未经授权的访问和数据泄露。Python 作为一种广泛使用的编程语言,提 
供了多种工具和库来实现文件加密。本文将详细介绍如何在 Python 中实现一个简单的文件 
加密工具。 
### 文件加密的基本概念 
文件加密是将文件内容转换成不可读的格式,只有拥有解密密钥的人才能将其还原为原始数 
据。常见的加密算法包括对称加密(如 AES)和非对称加密(如 RSA)。在本文中,我们将 
使用对称加密算法来实现文件加密和解密。 
### Python 中的加密库 
Python 的`cryptography`库是一个强大的加密工具包,支持多种加密算法和协议。首先,你 
需要安装这个库: 
```bash 
pip install cryptography 
``` 
### 使用 AES 算法加密文件 
AES(高级加密标准)是一种广泛使用的对称加密算法。以下是使用 AES 算法加密文件的基 
本步骤: 
1. **生成密钥**:首先需要生成一个密钥,这个密钥将用于加密和解密文件。 
2. **初始化向量(IV)**:为了提高安全性,每次加密时都应使用一个随机的初始化向量。 
3. **加密文件**:使用密钥和 IV 对文件内容进行加密。 
4. **存储加密文件和 IV**:将加密后的文件和 IV 存储在磁盘上。 
以下是具体的代码实现: 
```python 
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes 
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC 
from cryptography.hazmat.primitives import hashes 
from cryptography.hazmat.backends import default_backend 
from cryptography.hazmat.primitives import padding 
import os 
def generate_key(password: str, salt: bytes): 
kdf = PBKDF2HMAC(algorithm=hashes.SHA256(), 
length=32, 
salt=salt, 
iterations=100000, 
backend=default_backend() 
) 
return kdf.derive(password.encode()) 
def encrypt_file(input_file_path: str, output_file_path: str, password: str): 
salt = os.urandom(16) 
key = generate_key(password, salt) 
iv = os.urandom(16) 
# 创建加密器 
cipher = Cipher(algorithms.AES(key), modes.CFB(iv), backend=default_backend()) 
encryptor = cipher.encryptor() 
# 读取原始文件内容 
with open(input_file_path, 'rb') as file: 
plaintext = file.read() 
padded_plaintext = padding.pad(plaintext, algorithms.AES.block_size) 
# 加密文件内容 
ciphertext = encryptor.update(padded_plaintext) + encryptor.finalize() 
# 将加密后的内容、IV 和盐写入输出文件 
with open(output_file_path, 'wb') as file: 
file.write(salt + iv + ciphertext) 
return salt, iv 
def main(): 
password = input("Enter a password: ") 
input_file_path = input("Enter the path to the file to encrypt: ") 
output_file_path = input("Enter the path for the encrypted file: ") 
salt, iv = encrypt_file(input_file_path, output_file_path, password) 
print(f"File encrypted successfully. Salt: {salt.hex()}, IV: {iv.hex()}") 
if __name__ == "__main__": 
main() 
```
 
                