ITPub博客

首页 > 应用开发 > Python > Python 中如何实现文件加密?

Python 中如何实现文件加密?

原创 Python 作者:mingtian66 时间:2024-11-14 15:20:23 0 删除 编辑

在 Python 中实现文件加密通常使用对称加密算法(如 AES)或者非对称加密算法(如 RSA)。下面是使用 Python 的 cryptography 库实现文件加密和解密的基本步骤。我们将以 AES 对称加密为例来实现文件加密。
安装依赖

首先,你需要安装 cryptography 库,可以使用以下命令:

pip install cryptography

AES 加密示例

以下是一个示例代码,演示如何使用 AES 对称加密算法来加密和解密文件:
1. 加密文件

from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import padding
import os

def encrypt_file(file_path, key, iv):
    # 读取文件内容
    with open(file_path, 'rb') as f:
        data = f.read()

    # 使用 PKCS7 填充
    padder = padding.PKCS7(128).padder()
    padded_data = padder.update(data) + padder.finalize()

    # 创建 AES 加密器
    cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
    encryptor = cipher.encryptor()

    # 执行加密
    encrypted_data = encryptor.update(padded_data) + encryptor.finalize()

    # 保存加密文件
    encrypted_file_path = file_path + '.enc'
    with open(encrypted_file_path, 'wb') as f:
        f.write(encrypted_data)

    print(f"Encrypted file saved to {encrypted_file_path}")

# 示例:使用随机生成的密钥和初始化向量 (IV)
key = os.urandom(32)  # AES 256-bit key
iv = os.urandom(16)   # AES block size IV (128-bit)

encrypt_file('example.txt', key, iv)

2. 解密文件

def decrypt_file(encrypted_file_path, key, iv):
    # 读取加密文件内容
    with open(encrypted_file_path, 'rb') as f:
        encrypted_data = f.read()

    # 创建 AES 解密器
    cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
    decryptor = cipher.decryptor()

    # 执行解密
    decrypted_data = decryptor.update(encrypted_data) + decryptor.finalize()

    # 使用 PKCS7 去填充
    unpadder = padding.PKCS7(128).unpadder()
    unpadded_data = unpadder.update(decrypted_data) + unpadder.finalize()

    # 保存解密文件
    decrypted_file_path = encrypted_file_path.replace('.enc', '.dec')
    with open(decrypted_file_path, 'wb') as f:
        f.write(unpadded_data)

    print(f"Decrypted file saved to {decrypted_file_path}")

# 示例:解密文件
decrypt_file('example.txt.enc', key, iv)

说明

    对称加密:这里使用的是 AES 算法,它是对称加密算法。加密和解密使用相同的密钥。
    填充:AES 算法要求输入的数据大小是 16 字节的倍数,因此我们使用了 PKCS7 填充来保证数据的长度符合要求。
    初始化向量 (IV):AES 使用块加密模式(如 CBC)时需要一个 IV(初始化向量),确保相同的数据加密结果不同。

注意事项

    加密时需要确保密钥和 IV 安全存储或传输,以便解密时使用。
    加密的文件通常会比原始文件大,因为填充可能增加文件大小。

如果你希望使用其他加密方法(如 RSA 非对称加密)或更复杂的加密流程,随时告诉我!

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040412/viewspace-3048791/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2024-08-07

  • 博文量
    589
  • 访问量
    602987