欢迎访问宙启技术站
智能推送

使用cryptography.hazmat.primitives.ciphers进行文件加密解密

发布时间:2023-12-16 08:37:03

cryptography.hazmat.primitives.ciphers是Python中用于加密和解密数据的模块。它提供了对称加密算法的实现,如AES、DES和3DES等。下面是一个使用cryptography.hazmat.primitives.ciphers进行文件加密和解密的示例。

首先,我们需要安装cryptography库。可以使用以下命令在终端中安装它:

pip install cryptography

接下来,我们将文件加密和解密分为两个步骤。首先是文件加密的过程:

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

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

    # 生成随机初始化向量
    iv = os.urandom(16)

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

    # 创建加密器的上下文
    encryptor = cipher.encryptor()

    # 对数据进行填充
    padder = padding.PKCS7(128).padder()
    padded_data = padder.update(data) + padder.finalize()

    # 加密数据
    encrypted_data = encryptor.update(padded_data) + encryptor.finalize()

    # 保存加密后的文件
    encrypted_file_path = file_path + ".encrypted"
    with open(encrypted_file_path, 'wb') as encrypted_file:
        encrypted_file.write(iv)
        encrypted_file.write(encrypted_data)

    print("File encrypted successfully.")

# 加密密钥,必须是16个字节(128位)长
key = b'0123456789abcdef'

# 文件路径
file_path = 'example.txt'

# 执行文件加密
encrypt_file(file_path, key)

上述代码中,我们使用AES算法进行加密。首先,我们从文件中读取待加密的数据。然后,我们生成一个随机的初始化向量(IV)。接下来,我们使用AES算法和CBC模式创建一个加密器。我们使用AES密钥和IV初始化这个加密器。然后,我们使用padding.PKCS7填充器对数据进行填充。最后,我们将填充后的数据传递给加密器进行加密,得到加密后的数据。

接下来是文件解密过程的示例代码:

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

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

    # 创建解密器的上下文
    decryptor = cipher.decryptor()

    # 解密数据
    decrypted_data = decryptor.update(encrypted_data) + decryptor.finalize()

    # 对解密后的数据进行去填充
    unpadder = padding.PKCS7(128).unpadder()
    unpadded_data = unpadder.update(decrypted_data) + unpadder.finalize()

    # 保存解密后的文件
    decrypted_file_path = file_path + ".decrypted"
    with open(decrypted_file_path, 'wb') as decrypted_file:
        decrypted_file.write(unpadded_data)

    print("File decrypted successfully.")

# 执行文件解密
decrypt_file(encrypted_file_path, key)

上述代码中,我们首先读取加密文件的IV和加密数据。然后,我们使用AES算法和CBC模式创建一个解密器。我们使用AES密钥和IV初始化该解密器。然后,我们将加密数据传递给解密器进行解密,得到解密后的数据。最后,我们对解密后的数据进行去填充,并保存为解密后的文件。

这是一个使用cryptography.hazmat.primitives.ciphers进行文件加密和解密的示例。你可以按照这个示例修改和扩展实现你自己的加密和解密逻辑。