【Devchat 插件】创建一个GUI应用程序,使用Python进行加密和解密

news2024/11/17 21:43:06

VSCode 插件 DevChat——国内开源的 AI 编程!

  • 写在最前面
  • DevChat是什么?
  • 什么是以提示为中心的软件开发 (PCSD)?
  • 为什么选择DevChat?
  • 功能概述
    • 情境构建
    • 添加到上下文
    • 生成提交消息
    • 提示扩展
  • KOL粉丝专属福利介绍
    • DevChat专属下载链接
  • 产品尝鲜测试
    • 账号注册
  • 插件安装指南
    • 在 Windows 上安装git(如已安装,可跳过该步骤)
    • 继续vscode配置
  • 应用尝试
    • 与DevChat问答交流(有待完善~)
    • 创建GUI应用程序,使用Python进行加密和解密
    • gpt4一次成功(不愧是gpt4,但是给出的加密算法要简单很多)
    • GPT4全部代码
      • GPT3
    • 一步步完善代码
      • 生成密钥
      • 一键复制
      • 程序卡死(一键添加代码发给chatgpt)
      • 结果展示(非常完美!)
      • GPT3全部代码

写在最前面

是新的创作活动 ~

在AI浪潮的席卷下,开发者的编程领域也在经历着一场前所未有的变革。在这个过程中,AI智能编程工具的出现为开发者们提供了一种全新的编程方式。
Devchat是由国内领先的研发效能分析平台思码逸精心打造,它为开发者提供了一种全新的编程体验。使用 Devchat 插件,无缝融入IDE,一网打尽GPT-4、Claude、讯飞等知名大模型 ,帮助开发者提高开发效率,告别脏活累活!

方向1、尝鲜测评+场景实践
参考:https://blog.csdn.net/simayi2018/article/details/131245790

注意:如果关闭devchat,那么需要 Ctrl + Shift + P重新开启

DevChat是什么?

☕ 简单易用,无需复杂的快速工程设计。

🍻 专为可扩展性而设计。

欢迎通过 VS Code 市场版本 VS Code Marketplace 下载 GitHub 许可证 Discord 聊天
👉 从 Visual Studio Marketplace 安装 Visual Studio Code 扩展并享受 DevChat 👏

Devchat作为国内领先的研发效能分析平台思码逸精心打造的插件,为开发者提供了一种全新的编程体验。
Devchat插件不仅无缝融入IDE中,还整合了GPT-4、Claude、讯飞等知名大模型,可以帮助开发者提高开发效率,摆脱烦人的脏活累活,享受更愉悦高效的编程体验。

DevChat 是一个开源平台,使开发人员能够更有效地将 AI 集成到代码生成和文档中。DevChat 旨在超越简单的代码自动完成和对代码片段的有限操作。DevChat 为开发人员提供了一种非常实用和有效的方式来与大型语言模型 (LLM)进行交互和协作。

什么是以提示为中心的软件开发 (PCSD)?

传统的以代码为中心的范式正在不断发展。利用 DevChat 保持领先地位。

编写提示以创建代码。将提示转换为软件工程中的所有工件。
在这里插入图片描述

为什么选择DevChat?

虽然有许多可用的 AI 编码工具,但我们根据生成数万行代码的实用见解开发了 DevChat。DevChat 做出以下独特的设计选择:

  • 对提示中嵌入的上下文进行精确的手动控制。对上下文的精确控制是有效使用 AI 的关键。我们发现,大多数其他“智能”或“自动”工具往往会过度猜测用户需要在提示中输入什么内容。这通常会引入比 LLM 可以有效管理的更多的噪声。
  • 一个简单、可扩展的提示目录。带上你自己的提示,并建立一个对你和你的团队有用的库。轻松将您自己的提示模板集成到 DevChat 中,避免了大量的工程工作或陡峭的学习曲线。你不需要一个复杂的框架来让人工智能为你工作。它所需要的只是一个在文件系统上运行的标准编辑器。

功能概述

情境构建

出色的输出需要出色的输入。为了最大限度地发挥 AI 的力量,DevChat 可无缝地帮助您为 AI 提供正确的上下文。

例如,要为函数生成测试用例,可以将该函数与现有测试用例一起添加到提示中。该测试用例可作为 DevChat 的有用参考,使其能够了解如何编写特定于环境的有效测试用例,从而无需在提示中指定每个要求。

添加到上下文

可以使用 DevChat 将任何命令的输出(例如 )合并到提示符中。例如,可以将 的输出添加到 DevChat,然后 DevChat 可以为你生成提交消息。tree ./srcgit diff --cached

生成提交消息

程序分析可以帮助建立必要的上下文。假设你希望 DevChat 向你解释一些代码。如果 DevChat 知道代码正在调用的依赖函数,则可以执行更好的性能。在此方案中,可以使用 DevChat 选择目标代码来解释“符号定义”并将其添加到上下文中(通过单击加号按钮)。然后,DevChat 将生成一个提示,解释目标代码,同时考虑依赖函数。

提示扩展

DevChat 利用目录来管理预定义的提示模板。您可以使用文本编辑器轻松添加自己的或修改现有的。 默认情况下,该目录已命名并位于主目录的文件夹中。您可以在终端中运行以查看里面的内容。workflows.chatls ~/.chat/workflows

该目录通常包含三个子目录:、 和 。(system) 目录是 https://github.com/devchat-ai/workflows 的克隆,其中包含默认的提示模板。您可以覆盖这些系统提示。例如,如果您在目录中创建并定义自己的 ,DevChat 将使用您的版本而不是默认的 或 。workflowssysorgusrsyscommit_messageusrprompt.txtsysorg

workflows
├── sys
│ └── commit_message
│ └── prompt.txt
├── org
│ └── commit_message
│ └── prompt.txt
└── usr
└── commit_message
└── prompt.txt
该目录对于干净地维护团队约定或要求非常有用。您的团队可以共享一个 Git 存储库来存储提示,并且每个团队成员都可以在本地与存储库同步。提示将覆盖 中的提示,而单个开发人员可以在 中进一步自定义它们。orgorg~/.chat/workflows/orgorgsysusr

可以通过在 DevChat 输入中键入具有相应名称的“命令”,在提示中合并模板。键入后跟命令名称,如下所示。提示符目录的 -separated 路径对应于 -separated 命令名称。例如,如果要将位于当前提示中的“prompt.txt”文件嵌入到当前提示中,则应键入DevChat输入字段以及提示的其他内容。请注意,命令名称中不需要包含 、 或。

KOL粉丝专属福利介绍

DevChat专属下载链接

产品尝鲜测试

账号注册

注册登录Devchat 的步骤:

  1. 访问官网:

DevChat 编程助手 | 让开发更轻松

  1. 免费注册收邮件,然后就知道了。公测期间免费!(公测期多久不详,赶紧薅羊毛🐑)
  2. 注册后登录界面,会送余额哦
    在这里插入图片描述

插件安装指南

参考:https://zh.devchat.blog/devchat-vscode-installation-guide

👇 以下步骤不能省:

  1. 安装依赖软件
    Git 命令行:请参考 https://git-scm.com/book/en/v2/Getting-Started-Installing-Git 操作。完成安装后,在命令行终端运行 git --version 返回版本号表明成功。

在 Windows 上安装git(如已安装,可跳过该步骤)

还有几种方法可以在 Windows 上安装 Git。 最官方的版本可在 Git 网站上下载。 只需转到 https://git-scm.com/download/win,下载将自动开始。 请注意,这是一个名为 Git for Windows 的项目,它与 Git 本身是分开的;有关更多信息,请转到 https://gitforwindows.org。

在这里插入图片描述

下载完成后,参考:https://zhuanlan.zhihu.com/p/242540359

除了红色标记的部分,其余的可以一路next

01、使用许可声明

点击“Next”进入下图页面:

02、选择安装路径(建议安装到D盘)

在输入框内输入想要安装到的本机路径,也就是实际文件夹位置,或点击“Browse…”选择已经存在的文件夹,然后点击“Next”按钮继续,进入下图界面:

03、选择安装组件

上图红框内的选项是默认勾选的,建议不要动。绿色框1是决定是否在桌面创建快捷方式的。绿色框2是决定在所有控制台窗口中使用TrueType字体和是否每天检查Git是否有Windows更新的。这些根据自己需要选择。

点击“Next”按钮进入下图界面:

04、选择开始菜单页

这个界面是创建开始菜单中的名称,不需要修改,直接点“Next”按钮继续到下图的界面:

05、选择Git文件默认的编辑器

这个页面是在选择Git文件默认的编辑器,很少用到,所以默认Vim即可,直接点“Next”按钮继续到下图的界面:

06、调整您的PATH环境

这个界面是调整您的PATH环境。

第一种配置是“仅从Git Bash使用Git”。这是最安全的选择,因为您的PATH根本不会被修改。您只能使用 Git Bash 的 Git 命令行工具。但是这将不能通过第三方软件使用。

第二种配置是“从命令行以及第三方软件进行Git”。该选项被认为是安全的,因为它仅向PATH添加了一些最小的Git包装器,以避免使用可选的Unix工具造成环境混乱。

您将能够从Git Bash,命令提示符和Windows PowerShell以及在PATH中寻找Git的任何第三方软件中使用Git。这也是推荐的选项。

第三种配置是“从命令提示符使用Git和可选的Unix工具”。警告:这将覆盖Windows工具,如 “ find 和 sort ”。只有在了解其含义后才使用此选项。

我选择推荐的选项第二种配置,点击“Next”按钮继续到下图的界面:
在这里插入图片描述

07、选择HTTPS后端传输

这个界面是选择HTTPS后端传输。

第一个选项是“使用 OpenSSL 库”。服务器证书将使用ca-bundle.crt文件进行验证。这也是我们常用的选项。

第二个选项是“使用本地 Windows 安全通道库”。服务器证书将使用Windows证书存储验证。此选项还允许您使用公司的内部根CA证书,例如通过Active Directory Domain Services 。

我使用默认选项第一项,点击“Next”按钮继续到下图的界面:

08、配置行尾符号转换

这个界面是配置行尾符号转换。

第一个选项是“签出Windows风格,提交Unix风格的行尾”。签出文本文件时,Git会将LF转换为CRLF。提交文本文件时,CRLF将转换为LF。对于跨平台项目,这是Windows上的推荐设置(“ core.autocrlf”设置为“ true”)

第二个选项是“按原样签出,提交Unix样式的行尾”。签出文本文件时,Git不会执行任何转换。 提交文本文件时,CRLF将转换为LF。对于跨平台项目,这是Unix上的建议设置(“ core.autocrlf”设置为“ input”)

第三种选项是“按原样签出,按原样提交”。当签出或提交文本文件时,Git不会执行任何转换。不建议跨平台项目选择此选项(“ core.autocrlf”设置为“ false”)

我选择第一种选项,点击“Next”按钮继续到下图的界面:

09、配置终端模拟器以与Git Bash一起使用

这个界面是配置终端模拟器以与Git Bash一起使用。

第一个选项是“使用MinTTY(MSYS2的默认终端)”。Git Bash将使用MinTTY作为终端模拟器,该模拟器具有可调整大小的窗口,非矩形选择和Unicode字体。Windows控制台程序(例如交互式Python)必须通过“ winpty”启动才能在MinTTY中运行。

第二个选项是“使用Windows的默认控制台窗口”。Git将使用Windows的默认控制台窗口(“cmd.exe”),该窗口可以与Win32控制台程序(如交互式Python或node.js)一起使用,但默认的回滚非常有限,需要配置为使用unicode 字体以正确显示非ASCII字符,并且在Windows 10之前,其窗口不能自由调整大小,并且只允许矩形文本选择。

我选择默认的第一种选项,点击“Next”按钮继续到下图的界面:

10、配置配置额外的选项

这个界面是配置配置额外的选项。

第一个选项是“启用文件系统缓存”。文件系统数据将被批量读取并缓存在内存中用于某些操作(“core.fscache”设置为“true”)。 这提供了显著的性能提升。

第二个选项是“启用Git凭证管理器”。Windows的Git凭证管理器为Windows提供安全的Git凭证存储,最显着的是对Visual Studio Team Services和GitHub的多因素身份验证支持。 (需要.NET Framework v4.5.1或更高版本)。

第三个选项是“启用符号链接”。启用符号链接(需要SeCreateSymbolicLink权限)。请注意,现有存储库不受此设置的影响。

我勾选默认的第一、第二选项,点击“Next”按钮继续到下图的界面:

11、配置实验选项

这个界面是配置实验选项。

启用实验性的内置添加 -i / -p。(新!)使用实验性的内置交互式add(“ git add -i”或“ git add -p”)。这使其速度更快(尤其是启动!),但尚未被认为是可靠的。

12、配置启用特性

可修改的文件系统缓存文件系统数据将被批量读取,并缓存到内存中用于某些操作(核心操作)。fscache"被设置为"true")。这提供了显著的性能提升。

DEnable符号链接启用符号链接(需要有SeCreateSymbolicLink权限)。请注意,现有存储库不受此设置的影响。

13、配置选项启用哪些前沿功能

使实验支持伪游戏机。(新!)这允许在不使用winpty的情况下在Git Bash窗口中运行Node或Python等本地控制台程序,但它仍然存在已知的bug

默认不勾选,直接点击“Next”按钮继续到下图的安装进度界面:

安装进度结束之后,会出现下图的完成Git安装向导界面:

14、安装进度指示

安装进度结束之后,会出现下图的完成Git安装向导界面:

在这个界面,可以勾选是否启动启动Git Bash和是否查看发行说明,然后点“Finish”按钮退出安装界面。

15、启动测试

然后验证环境:
在命令行终端运行

git --version

返回版本号表明成功。
在这里插入图片描述

继续vscode配置

  1. 需要 Python 3 环境(可参考https://realpython.com/installing-python安装)。

  2. 从 VSCode Marketplace 安装,或者VSCode里点左侧插件,搜索“devchat”安装。
    打开“扩展”视图 (⇧⌘X),搜索“DevChat”,然后安装扩展:

在这里插入图片描述

  1. vs code配置
    按 ⇧ ⌘ P(苹果电脑)或 Ctrl + Shift + P(Windows操作系统)或者 F1,打开命令面板,输入“devchat access key”回车,再输入邮件收到的 key(以“DC”开头的字符串)。
    在这里插入图片描述

在这里插入图片描述
单击状态栏中的 DevChat 图标。如果未设置 API 密钥,DevChat 将提示您输入该密钥。只需输入您的 OpenAI 密钥(DevChat 的密钥适用于没有 OpenAI 密钥的用户)。
在这里插入图片描述

当右下角状态栏DevChat出现✅,表明可以正常使用;点击✅出现对话框。建议拖动🐰到右侧,避免在左侧工具栏中来回切换的麻烦。

在这里插入图片描述

应用尝试

与DevChat问答交流(有待完善~)

在这里插入图片描述

创建GUI应用程序,使用Python进行加密和解密

最近在学代码,密码术意味着更改消息的文本,以便不知道你秘密的人不会理解你的消息。

让Devchat 插件辅助我,写一个加密和解密的微项目吧

下面就来创建一个GUI应用程序,使用Python进行加密和解密。
在这里,我们需要编写使用无限循环的代码,代码将不断询问用户是否要加密或解密消息。
此外,我希望GUI界面生成的加密后信息可以给我一个复制的按钮,能一键复制加密和解密后的信息。

gpt4一次成功(不愧是gpt4,但是给出的加密算法要简单很多)

创建一个GUI应用程序,使用Python进行加密和解密。
在这里,我们需要编写使用无限循环的代码,代码将不断询问用户是否要加密或解密消息。
此外,我希望GUI界面生成的加密后信息可以给我一个复制的按钮,能一键复制加密和解密后的信息。

在这里插入图片描述
在这里插入图片描述

GPT4全部代码

import tkinter as tk
from tkinter import messagebox
import pyperclip

def encrypt(text):
    # 这里仅是一个简易的加密函数,你可以根据需要替换成更复杂的加密算法
    return ''.join([chr(ord(c)+3) for c in text])

def decrypt(text):
    # 这里仅是一个简易的解密函数,你可以根据需要替换成更复杂的解密算法
    return ''.join([chr(ord(c)-3) for c in text])

def encrypt_message():
    text = text_input.get("1.0","end-1c")
    encrypted = encrypt(text)
    text_output.delete('1.0', tk.END)
    text_output.insert(tk.END, encrypted)
    pyperclip.copy(encrypted)
    messagebox.showinfo("Copied to Clipboard", "The encrypted message has been copied to clipboard!")

def decrypt_message():
    text = text_input.get("1.0","end-1c")
    decrypted = decrypt(text)
    text_output.delete('1.0', tk.END)
    text_output.insert(tk.END, decrypted)
    pyperclip.copy(decrypted)
    messagebox.showinfo("Copied to Clipboard", "The decrypted message has been copied to clipboard!")

# 创建主窗口
root = tk.Tk()
root.title("Encryption and Decryption")

# 设置输入文本区域
text_input = tk.Text(root, height=8)
text_input.pack()

# 设置按钮
button1 = tk.Button(root, text="Encrypt", command=encrypt_message)
button1.pack()
button2 = tk.Button(root, text="Decrypt", command=decrypt_message)
button2.pack()

# 设置输出文本区域
text_output = tk.Text(root, height=8)
text_output.pack()

# 主循环
root.mainloop()

GPT3

连环境都能指导配置哟,免去了一切顾虑

在这里插入图片描述

import PySimpleGUI as sg
from cryptography.fernet import Fernet

# 生成加密密钥
def generate_key():
    key = Fernet.generate_key()
    with open('key.key', 'wb') as key_file:
        key_file.write(key)

# 读取密钥
def load_key():
    try:
        with open('key.key', 'rb') as key_file:
            return key_file.read()
    except FileNotFoundError:
        return None

# 加密消息
def encrypt_message(message):
    key = load_key()
    if key:
        f = Fernet(key)
        encrypted_message = f.encrypt(message.encode())
        return encrypted_message.decode()
    else:
        return '请先生成密钥'

# 解密消息
def decrypt_message(message):
    key = load_key()
    if key:
        f = Fernet(key)
        decrypted_message = f.decrypt(message.encode())
        return decrypted_message.decode()
    else:
        return '请先生成密钥'

# 创建GUI界面
layout = [
    [sg.Text("请输入消息:")],
    [sg.InputText(key="input")],
    [sg.Text(size=(40, 1), key="output")],
    [sg.Button("加密"), sg.Button("解密"), sg.Button("退出")]
]

window = sg.Window("加密/解密工具", layout)

# 主循环
while True:
    event, values = window.read()
    if event == "退出" or event == sg.WIN_CLOSED:
        break
    elif event == "加密":
        message = values["input"]
        encrypted_message = encrypt_message(message)
        window["output"].update(encrypted_message)
    elif event == "解密":
        message = values["input"]
        decrypted_message = decrypt_message(message)
        window["output"].update(decrypted_message)

window.close()

一步步完善代码

有点小问题,指导一下devchat吧

算了,让他指导我吧hh

生成密钥

在这里插入图片描述

这段代码做了哪些工作,为什么没有生产加密密钥?

这段代码具体做了以下工作:

  1. 使用Fernet.generate_key()函数生成一个加密密钥。
  2. 使用open函数以二进制写入模式打开key.key文件。
  3. 将生成的密钥写入到key.key文件中。
  4. 使用with代码块,确保在操作完成后自动关闭文件。

这个代码段是用来生成加密密钥的函数generate_key。它通过调用Fernet.generate_key()函数生成一个用于加密和解密的随机密钥并将其保存在文件key.key中。

在你提供的代码中,generate_key函数没有被调用,所以并没有生成加密密钥。如果你想要生成密钥,你可以在主循环之前手动调用generate_key()函数,或者在GUI界面中添加一个按钮来触发生成密钥的操作。

一键复制

不能复制,很难受

修改前
在这里插入图片描述
修改后:
在这里插入图片描述

我希望GUI界面生成的加密后信息可以给我一个复制的按钮,能一键复制加密后的信息。请修改这段代码

好的,以下是修改后的代码,添加了一个复制按钮,用于一键复制加密后的信息。

import PySimpleGUI as sg
import pyperclip
from cryptography.fernet import Fernet

# 生成加密密钥
def generate_key():
    key = Fernet.generate_key()
    with open('key.key', 'wb') as key_file:
        key_file.write(key)

# 读取密钥
def load_key():
    try:
        with open('key.key', 'rb') as key_file:
            return key_file.read()
    except FileNotFoundError:
        return None

# 加密消息
def encrypt_message(message):
    key = load_key()
    if key:
        f = Fernet(key)
        encrypted_message = f.encrypt(message.encode())
        return encrypted_message.decode()
    else:
        return '请先生成密钥'

# 解密消息
def decrypt_message(message):
    key = load_key()
    if key:
        f = Fernet(key)
        decrypted_message = f.decrypt(message.encode())
        return decrypted_message.decode()
    else:
        return '请先生成密钥'

# 创建GUI界面
layout = [
    [sg.Text("请输入消息:")],
    [sg.InputText(key="input")],
    [sg.Text(size=(40, 1), key="output")],
    [sg.Button("加密"), sg.Button("解密"), sg.Button("复制"), sg.Button("退出")]
]

window = sg.Window("加密/解密工具", layout)

# 主循环
while True:
    event, values = window.read()
    if event == "退出" or event == sg.WIN_CLOSED:
        break
    elif event == "加密":
        message = values["input"]
        encrypted_message = encrypt_message(message)
        window["output"].update(encrypted_message)
    elif event == "解密":
        message = values["input"]
        decrypted_message = decrypt_message(message)
        window["output"].update(decrypted_message)
    elif event == "复制":
        encrypted_message = window["output"].get()
        pyperclip.copy(encrypted_message)

window.close()

在修改后的代码中,我添加了一个名为"复制"的按钮,并在主循环中添加了一个事件处理程序来处理"复制"按钮的点击事件。事件处理程序使用pyperclip库将加密后的信息复制到剪贴板中。

确保在运行代码之前安装pyperclip库,可以使用以下命令进行安装:

pip install pyperclip

通过运行以上代码修改版,将会打开一个GUI窗口。你可以输入要加密或解密的消息,并通过点击"加密"或"解密"按钮来生成加密后的信息。点击"复制"按钮后,加密后的信息将会被复制到剪贴板中,你可以随后将其粘贴到其他地方。

程序卡死(一键添加代码发给chatgpt)

在这里插入图片描述

每次解码时程序卡死,请找出原因并给出修改后的代码

解密时系统卡死的原因可能是因为在解密函数decrypt_message中,尝试使用错误的密钥进行解密。当密钥不正确时,cryptography库的解密操作可能导致系统卡顿。

解决方案:
要解决这个问题,我们需要在加密和解密过程中使用相同的密钥。我们可以在程序开始时生成密钥,并在加密和解密函数中使用该密钥。

以下是修改后的代码:

import PySimpleGUI as sg
import pyperclip
from cryptography.fernet import Fernet

# 生成加密密钥
def generate_key():
    key = Fernet.generate_key()
    with open('key.key', 'wb') as key_file:
        key_file.write(key)
    return key

# 读取密钥
def load_key():
    try:
        with open('key.key', 'rb') as key_file:
            return key_file.read()
    except FileNotFoundError:
        return None

# 加密消息
def encrypt_message(message):
    key = load_key()
    if key:
        f = Fernet(key)
        encrypted_message = f.encrypt(message.encode())
        return encrypted_message.decode()
    else:
        return '请先生成密钥'

# 解密消息
def decrypt_message(message):
    key = load_key()
    if key:
        f = Fernet(key)
        decrypted_message = f.decrypt(message.encode())
        return decrypted_message.decode()
    else:
        return '请先生成密钥'

# 创建GUI界面
layout = [
    [sg.Text("请输入消息:")],
    [sg.InputText(key="input")],
    [sg.Text(size=(40, 1), key="output")],
    [sg.Button("加密"), sg.Button("解密"), sg.Button("复制"), sg.Button("退出")]
]

window = sg.Window("加密/解密工具", layout)

# 生成密钥
key = generate_key()

# 主循环
while True:
    event, values = window.read()
    if event == "退出" or event == sg.WIN_CLOSED:
        break
    elif event == "加密":
        message = values["input"]
        encrypted_message = encrypt_message(message)
        window["output"].update(encrypted_message)
    elif event == "解密":
        message = values["input"]
        decrypted_message = decrypt_message(message)
        window["output"].update(decrypted_message)
    elif event == "复制":
        encrypted_message = window["output"].get()
        pyperclip.copy(encrypted_message)

window.close()

在修改后的代码中,我将生成密钥的过程放在了程序开始的位置,这样生成的密钥将会在整个程序的生命周期内使用。这个密钥可以在加密和解密函数中重复使用,确保使用相同的密钥进行操作。通过这个修改,解密时不会再导致系统卡死的问题。

请确保在运行之前安装 pyperclip 库,可以使用以下命令进行安装:

pip install pyperclip

现在运行修改后的代码,应该可以解决解密时系统卡死的问题。

结果展示(非常完美!)

在这里插入图片描述
在这里插入图片描述

gAAAAABlTzc_p5HPaYrWRs8ksogYy1gkdC5QPbj8AVLzXvTjECV0tkwsnNTISdwGIWb7RTeuCN5VUdORIbzBfM263XHv4QLHsLA_hAbyEfPR-AbLaS2SF58=
在这里插入图片描述

GPT3全部代码

import PySimpleGUI as sg
import pyperclip
from cryptography.fernet import Fernet

# 生成加密密钥
def generate_key():
    key = Fernet.generate_key()
    with open('key.key', 'wb') as key_file:
        key_file.write(key)
    return key

# 读取密钥
def load_key():
    try:
        with open('key.key', 'rb') as key_file:
            return key_file.read()
    except FileNotFoundError:
        return None

# 加密消息
def encrypt_message(message):
    key = load_key()
    if key:
        f = Fernet(key)
        encrypted_message = f.encrypt(message.encode())
        return encrypted_message.decode()
    else:
        return '请先生成密钥'

# 解密消息
def decrypt_message(message):
    key = load_key()
    if key:
        f = Fernet(key)
        decrypted_message = f.decrypt(message.encode())
        return decrypted_message.decode()
    else:
        return '请先生成密钥'

# 创建GUI界面
layout = [
    [sg.Text("请输入消息:")],
    [sg.InputText(key="input")],
    [sg.Text(size=(40, 1), key="output")],
    [sg.Button("加密"), sg.Button("解密"), sg.Button("复制"), sg.Button("退出")]
]

window = sg.Window("加密/解密工具", layout)

# 生成密钥
key = generate_key()

# 主循环
while True:
    event, values = window.read()
    if event == "退出" or event == sg.WIN_CLOSED:
        break
    elif event == "加密":
        message = values["input"]
        encrypted_message = encrypt_message(message)
        window["output"].update(encrypted_message)
    elif event == "解密":
        message = values["input"]
        decrypted_message = decrypt_message(message)
        window["output"].update(decrypted_message)
    elif event == "复制":
        encrypted_message = window["output"].get()
        pyperclip.copy(encrypted_message)

window.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1200502.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【 第十二章】软件设计师 之 面向对象设计与结构化分析设计

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 备考资料导航 软考好处:软考的…

servlet 的XML Schema从哪边获取

servlet 6.0的规范定义: https://jakarta.ee/specifications/servlet/6.0/ 其中包含的三个XML Schema:web-app_6_0.xsd、web-common_6_0.xsd、web-fragment_6_0.xsd。但这个页面没有给出下载的链接地址。 正好我本机有Tomcat 10.1.15版本的源码&#…

改进YOLO系列 | YOLOv5/v7 引入反向残差注意力模块 iRMB | 《ICCV 2023 最新论文》

论文地址:https://arxiv.org/abs/2301.01146 代码地址:https://github.com/zhangzjn/EMO 本论文着重于开发现代、高效、轻量级的模型,用于进行密集预测,同时在参数、FLOPs和性能之间进行权衡。倒置残差块(IRB)作为轻量级CNN的基础设施,但在基于注意力的研究中尚未找到对…

Linux系统编程——实现cp指令(应用)

cp指令格式 cp [原文件] [目标文件] cp 1.c 2.c 功能是将原文件1.c复制后并改名成2.c(内容相同,实现拷贝) 这里需要引入main函数的参数解读: 我们在定义函数时许多都带有参数,输入参数后便可进行定义函数内的功能执行,而main…

图像相似度对比方法

1.哈希方法,其中包括均值哈希、插值哈希、感知哈希方法。计算出图片的哈希值,一般使用汉明 距离计算两个图片间的差距。 2.直方图算法,其中包括灰度直方图算法,RGB直方图算法, 3.灰度图算法:MSE、SSIM、…

改进YOLO系列 | YOLOv5/v7 引入Super Token Sampling ViT | 《CVPR 2023 最新论文》

论文地址:https://arxiv.org/abs/2211.11167 代码地址:https://github.com/hhb072/STViT 视觉变换器已经在许多视觉任务中取得了令人印象深刻的性能。然而,它在捕捉浅层的局部特征时可能会受到高度冗余的影响。因此,引入了局部自注意力或早期卷积,这些方法牺牲了捕捉长距…

Vue3 setup函数

一、setup函数介绍 setup函数是Vue3中全新的一个配置项,值为一个函数,是所有 Composition API 中“表演的舞台”。 我们在Vue2中用到的所有数据、方法,都需要配置在setup中。 这是我们在Vue2中的写法: 这是我们在Vue3 setup中的…

JS移动端触屏事件

在我们PC端中有许多的事件,那我们在移动端有没有事件呢?让我为大家介绍一下移动端常用的事件,触屏事件 触屏事件 touch (也称触摸事件),Android 和IOS 都有 touch 对象代表一个触摸点。触摸点可能是一根手指,也可能是一…

【设计原则篇】聊聊单一职责原则

因为是刚开始写软件设计相关的文章,这里先大概介绍下,软件设计相关的知识图谱。大概分类的话, 编程范式 软件设计相关原则 Don’t Repeat Yourself (DRY)Keep It Simple, Stupid(KISS)Program to an interface, not an implementationYou Ai…

电脑版微信收到的图片怎么样自动保存到指定文件夹中?

8-5 在平时的工作中,如果你每天都需要接收并保存很多同事发来的图片,如何实现自动保存在微信上接收到的图片呢?本文的方法也许适合你,它可以自动把微信上收到的图片、视频、文件帮你保存到指定地方,可以大大地提高工作…

2023年【起重机械指挥】考试试卷及起重机械指挥操作证考试

题库来源:安全生产模拟考试一点通公众号小程序 2023年起重机械指挥考试试卷为正在备考起重机械指挥操作证的学员准备的理论考试专题,每个月更新的起重机械指挥操作证考试祝您顺利通过起重机械指挥考试。 1、【多选题】《中华人民共和国特种设备安全法》…

【狂神说Java】Nginx详解

✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :狂神说Java 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台,永远…

postman上传照片,视频,音频等上传文件操作测试方法

Postman上传照片,视频,音频等上传文件操作测试方法 新建一个request,更改请求方式,点击Body 勾选form-data ,key后面下拉框选择File 上一步勾选后Value即出现选择本地文件按钮,填写Key,选择文件即可 此时…

【 第十三章】软件设计师 之 面向对象程序设计

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 备考资料导航 软考好处:软考的…

Hutool Excel导出 配置宽度自适应 工具类

简介&#xff1a;Hutool是一款十分好用的开发工具集&#xff0c;里面包含了大部分日常开发常用的工具&#xff0c;使用简单方便&#xff0c;可以大大提升日常开发效率&#xff0c;十分推荐大家使用。这里简单总结一下基于Hutool的Excel使用。 一、Hutool依赖 <!-- Excel导出…

从0开始python学习-34.pytest常用插件

目录 1. pytest-html&#xff1a;生成HTML测试报告 2.pytest-xdist&#xff1a;并发执行用例 3. pytest-order&#xff1a;自定义用例的执行顺序 4. pytest-rerunfailures&#xff1a;用例失败时自动重试 5. pytest-result-log:用例执行结果记录到日志文件 1. pytest-html…

Linux MMC子系统 - 4.eMMC 5.1常用命令说明(2)

By: Ailson Jack Date: 2023.11.12 个人博客&#xff1a;http://www.only2fire.com/ 本文在我博客的地址是&#xff1a;http://www.only2fire.com/archives/163.html&#xff0c;排版更好&#xff0c;便于学习&#xff0c;也可以去我博客逛逛&#xff0c;兴许有你想要的内容呢。…

CnosDB 狂欢!全面支持 Helm 部署,轻松搞定你的分布式时序数据库!

大家好&#xff01;今天有个热辣新闻要和大家分享——CnosDB 狂欢时刻来啦&#xff0c;全面支持 Helm 部署&#xff01;如果你是物联网、工业互联网、车联网或者IT运维的粉丝&#xff0c;那你绝对不能错过这个重磅消息&#xff01; CnosDB Helm Chart 究竟是啥&#xff1f; 别…

C# Socket通信从入门到精通(8)——单个异步TCP服务器监听多个客户端C#代码实现

前言: 我们在C# Socket通信从入门到精通(7)——单个异步TCP服务器监听单个客户端C#代码实现这篇文章中讲述了一个服务器如何与一个客户端进行交互,但是有时候我们需要一个服务器与多个客户端进行交互,这时候上一篇文章介绍的方法就不足以实现这个功能,本篇文章就是介绍如…

通过easyexcel导出数据到excel表格

这篇文章简单介绍一下怎么通过easyexcel做数据的导出&#xff0c;使用之前easyui构建的歌曲列表crud应用&#xff0c;添加一个导出按钮&#xff0c;点击的时候直接连接后端接口地址&#xff0c;在后端的接口完成数据的导出功能。 前端页面完整代码 let editingId; let request…