from cryptography.fernet import Fernet
import os
import tkinter as tk
from tkinter import filedialog, messagebox
# 生成密钥
def generate_key():
return Fernet.generate_key()
# 加密函数
def encrypt(key, plaintext):
f = Fernet(key)
encrypted = f.encrypt(plaintext.encode('utf-8'))
return encrypted
# 解密函数
def decrypt(key, encrypted):
f = Fernet(key)
decrypted = f.decrypt(encrypted)
return decrypted.decode('utf-8')
# 写入 .opika 文件
def write_opika_file(filename, key, content):
encrypted_content = encrypt(key, content)
with open(filename, 'wb') as file:
file.write(b'OPIKA0001') # 文件头
file.write(key + b'\n') # 写入密钥(用于解密)
file.write(encrypted_content) # 写入加密内容
# 读取 .opika 文件
def read_opika_file(filename):
with open(filename, 'rb') as file:
header = file.read(10) # 读取文件头
if header != b'OPIKA0001':
raise ValueError(f'Invalid file format. 读取到: {header}')
key = file.readline().strip() # 读取密钥并去掉换行符
encrypted_content = file.read() # 读取加密内容
return key, decrypt(key, encrypted_content)
# 主函数
def main():
# 创建主窗口
root = tk.Tk()
root.withdraw() # 隐藏主窗口
# 输入明文
content = input("请输入需要加密的文本: ")
# 选择文件保存路径
output_file = filedialog.asksaveasfilename(defaultextension=".opika", filetypes=[("OPIKA files", "*.opika"), ("All files", "*.*")])
if output_file:
key = generate_key() # 生成密钥
write_opika_file(output_file, key, content)
messagebox.showinfo("成功", f"文件已保存为 {output_file}。")
# 打开并读取文件以解密内容
key, decrypted_content = read_opika_file(output_file)
print("解密后的内容:", decrypted_content)
else:
print("未选择文件,操作取消。")
if __name__ == '__main__':
main()
这段有什么问题啊, 报错了:
Traceback (most recent call last):
File "/Users/opika/opika file.py", line 63, in <module>
main()
File "/Users/opika/opika file.py", line 57, in main
key, decrypted_content = read_opika_file(output_file)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/opika/opika file.py", line 34, in read_opika_file
assert header == b'OPIKA0001', 'Invalid file format.'
^^^^^^^^^^^^^^^^^^^^^^
AssertionError: Invalid file format.
Mac系统, 无虚拟环境, VSCode