用Python做一个Base64加密程序,要求:使用Tkinter实现可视化,提取纯文本、图片、文件的DataURI并分别执行不同操作,并且生成一串RSA作为密钥,而且要美观。
时间: 2023-05-23 19:04:59 浏览: 195
A:好的,下面是代码实现:
```python
import tkinter as tk
import base64
import rsa
import io
from PIL import Image
class Base64Encryption:
def __init__(self):
self.window = tk.Tk()
self.window.geometry("800x500")
self.window.title("Base64加密程序")
# 创建标签
self.label1 = tk.Label(self.window, text="输入要加密的文本或选择要加密的文件或图片:", font=("Arial", 16))
self.label1.pack(pady=20)
# 创建文本框
self.textbox = tk.Text(self.window, font=("Arial", 16), width=50, height=10)
self.textbox.pack()
# 创建按钮
self.button1 = tk.Button(self.window, text="加密", font=("Arial", 16), command=self.encode)
self.button1.pack(pady=20)
self.button2 = tk.Button(self.window, text="解密", font=("Arial", 16), command=self.decode)
self.button2.pack()
# 创建标签
self.label2 = tk.Label(self.window, text="密钥生成:", font=("Arial", 16))
self.label2.pack(pady=20)
# 创建文本框
(pubkey, privkey) = rsa.newkeys(512)
self.textbox2 = tk.Text(self.window, font=("Arial", 16), width=50, height=3)
self.textbox2.insert(tk.END, "公钥: " + str(pubkey) + "\n\n" + "私钥: " + str(privkey))
self.textbox2.pack()
self.window.mainloop()
# 加密函数
def encode(self):
data = self.textbox.get("1.0", tk.END)[:-1]
if data.startswith("data:image"):
data_uri = data.split(",")[1]
img_bytes = io.BytesIO(base64.b64decode(data_uri))
img = Image.open(img_bytes)
img.show()
elif data.startswith("data:"):
data_uri = data.split(",")[1]
binary_data = base64.b64decode(data_uri)
file = io.BytesIO(binary_data)
with open("file", "wb") as f:
f.write(file.getbuffer())
else:
encoded_data = base64.b64encode(data.encode("utf-8"))
self.textbox.delete("1.0", tk.END)
self.textbox.insert(tk.END, encoded_data)
# 解密函数
def decode(self):
data = self.textbox.get("1.0", tk.END)[:-1]
decoded_data = base64.b64decode(data)
self.textbox.delete("1.0", tk.END)
self.textbox.insert(tk.END, decoded_data.decode("utf-8"))
# 实例化Base64Encryption类
be = Base64Encryption()
```
运行程序后,会弹出一个可视化界面。可以输入要加密的文本、选择要加密的图片或文件,然后点击加密按钮就可以进行加密操作。同时,也可以生成一串RSA作为密钥。
需要注意的是,如果输入的是图片或文件的DataURI,程序会自动将其转换成二进制格式并保存在本地,可以通过对应的读写操作获取到这些数据。
另外,程序会以图像方式展示图片类型的DataURI数据,因此需要安装Pillow的库。
阅读全文