Python实行任意文件的加密—解密
环 境:
系统:macOS Sonoma
IDE:PyCharm 2024 Professional Edition
源代码如下:
from cryptography.fernet import Fernet
import os
# 定义一个加密类
class Encrypt:
# 参数是需要被加密的文件
def __init__(self, input_file):
# 加密的密钥
self.key = None
self.input_file = input_file
# 加密文件的名字
self.encrypted_file = os.path.basename(input_file).split('.')[0]+'_encrypted.' + os.path.basename(input_file).split('.')[1]
# 定义一个加密方法
def encrypt_file(self):
self.key = Fernet.generate_key()
cipher_suite = Fernet(self.key)
if os.path.isfile(input_file) and os.path.exists(input_file):
# 把加密的密钥保存到指定的文件夹,记住保存好,否则无法解密
with open(os.path.dirname(input_file) + '/' + os.path.basename(input_file).split('.')[0] + '_key.txt', 'wb') as f:
f.write(self.key)
with open(self.input_file, 'rb') as file:
file_data = file.read()
encrypted_data = cipher_suite.encrypt(file_data)
# 生成加密文件
with open(os.path.dirname(input_file) + '/' + self.encrypted_file, 'wb') as file:
file.write(encrypted_data)
print('加密成功!注意保管加密的密钥!!')
return True
else:
print('加密失败!')
return False
# 定义一个解密的类
class Decrypt:
# 被加密的文件和加密时生成的密钥作为参数, 需要完整的路径
def __init__(self, encrypted_file, input_key):
self.encrypted_file = encrypted_file
self.decrypted_file_name = os.path.basename(self.encrypted_file).split('.')[0].strip('_encrypted') + os.path.basename(self.encrypted_file).split('.')[1]
self.key = input_key
# 需要解密的加密文件的路径
self.path = os.path.dirname(self.encrypted_file)
# 定义一个解密方法
def decrypt_file(self):
if os.path.isfile(self.encrypted_file) and os.path.exists(self.encrypted_file):
with open(self.key, 'rb') as f:
self.key = f.read()
cipher_suite = Fernet(self.key)
with open(self.encrypted_file, 'rb') as file:
encrypted_data = file.read()
decrypted_data = cipher_suite.decrypt(encrypted_data)
with open(self.path + '/'+ self.decrypted_file_name + '_decrypted'
+
'.' + os.path.basename(self.encrypted_file).split('.')[1], 'wb') as file:
file.write(decrypted_data)
print('解密成功!')
return True
else:
print('解密失败!')
return False
if __name__ == '__main__':
# 输出一个菜单
print('= ' * 15)
print('1. 加密'.center(20, ' '))
print('2. 解密'.center(20, ' '))
print('= ' * 10)
choice = input('请输入您的选择:')
if int(choice) == 1:
input_file = input('请输入要加密的文件(包括完整路径):')
encrypt_file = Encrypt(input_file)
encrypt_file.encrypt_file()
if int(choice) == 2:
input_file = input('请输入要解密的文件(包括完整路径):')
input_key = input('请输入要解密的密钥(包括完整的路径):')
Decrypt(input_file, input_key).decrypt_file()
运行结果如下图所示:
⚠️:部分加密的代码由AI生成!感谢这个伟大的AI时代。真是太给力了,大大的提高了工作效率。