使用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进行文件加密和解密的示例。你可以按照这个示例修改和扩展实现你自己的加密和解密逻辑。
