Python中使用MODE_CFB模式实现加密文件的方法
发布时间:2023-12-23 18:30:44
在Python中,我们可以使用Cryptodome库来实现MODE_CFB模式对文件进行加密。Cryptodome库是一个强大的加密库,提供了多种加密算法和模式。
首先,我们需要安装Cryptodome库,可以使用pip命令进行安装:
pip install pycryptodomex
接下来,我们可以使用下面的代码来实现文件的加密过程:
from Cryptodome.Cipher import AES
from Cryptodome.Random import get_random_bytes
from Cryptodome.Util.Padding import pad, unpad
def encrypt_file(file_path, key):
# 生成一个16字节的随机初始向量
iv = get_random_bytes(16)
cipher = AES.new(key, AES.MODE_CFB, iv)
# 将生成的初始向量写入加密文件的开头
with open(file_path, 'rb') as file:
with open(file_path + '.enc', 'wb') as encrypted_file:
encrypted_file.write(iv)
while True:
# 每次读取一块数据进行加密
data = file.read(4096)
if len(data) == 0:
break
encrypted_data = cipher.encrypt(data)
encrypted_file.write(encrypted_data)
def decrypt_file(file_path, key):
with open(file_path, 'rb') as encrypted_file:
# 从加密文件的开头读取初始向量
iv = encrypted_file.read(16)
cipher = AES.new(key, AES.MODE_CFB, iv)
with open(file_path + '.dec', 'wb') as decrypted_file:
while True:
# 每次读取一块数据进行解密
encrypted_data = encrypted_file.read(4096)
if len(encrypted_data) == 0:
break
decrypted_data = cipher.decrypt(encrypted_data)
decrypted_file.write(decrypted_data)
# 测试加密文件的例子
key = get_random_bytes(16) # 生成一个16字节的随机密钥
file_path = 'plain_file.txt'
with open(file_path, 'w') as file:
file.write('Hello, world!')
encrypt_file(file_path, key)
print('文件加密完成')
# 测试解密文件的例子
decrypt_file(file_path + '.enc', key)
with open(file_path + '.dec', 'r') as decrypted_file:
print('解密后的文件内容为:', decrypted_file.read())
上面的代码中,我们首先定义了encrypt_file和decrypt_file两个函数,用于对文件进行加密和解密。在encrypt_file函数中,我们首先生成一个16字节的随机初始向量,并使用密钥和初始向量创建一个AES加密对象。然后,我们逐块读取文件数据并进行加密,加密后的数据写入新的加密文件中。
在decrypt_file函数中,我们首先从加密文件的开头读取初始向量,并使用密钥和初始向量创建一个AES解密对象。然后,我们逐块读取加密文件数据并进行解密,解密后的数据写入新的解密文件中。
上面的代码中还包含了一个测试示例,我们首先生成一个16字节的随机密钥,然后创建一个名为plain_file.txt的文件,并写入一些内容。接下来,我们使用encrypt_file函数对该文件进行加密,加密后的文件名为plain_file.txt.enc。最后,我们使用decrypt_file函数对加密文件进行解密,并输出解密后的文件内容。
注意,上述代码仅仅是一个简单的示例,实际使用中可能需要处理更多异常情况,并确保密钥的安全性。
