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

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()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【原创课设】java+swing+mysql选课管理系统设计与实现

摘要: 随着学校规模的扩大和课程设置的多样化,传统的手工选课管理方式已经无法满足现代教育的需求。因此,开发一款高效、便捷的选课管理系统变得尤为重要。该系统可以提高选课工作的效率,减少人为错误,同时也能为学生…

linux循环继续fordodone数值处理和脚本的追踪调试

格式 for ((初始值:限制值;步长)) do 程序段 done 注意点:$(()) 数值运算 $()命令 ${}取值 sh [-nvx] *.sh -n 不执行脚本,检查语法错误-常用 -v 执行之前,将…

Windows server 2008 R2 IIS搭建ASP网站教程

一、安装应用程序服务器 提示安装成功 二、添加角色服务asp 三、asp网站配置 放入源码 设置网站首页为index.asp: 设置应用程序池 四、设置网站目录属性 五、access数据库连接配置 Cd c:\Windows\System32\inetsrv appcmd list apppool /xml | appcmd set apppool /…

华为防火墙基本原理工作方法总结(包含源进源出)

两台防火墙在规划接口时一般2台防火墙的业务口相同,心跳口相同,这个上是基础,例如:第一台防火墙业务口用了g1/0/1口,那第二台防火墙业务口也得是这个g1/0/1口。 防火墙只会对tcp首包syn建立会话表,其它丢掉…

【Redis系列】Redis上设置key,value的时候出现NOAUTH Authentication required提示如何解决?

哈喽,大家好,我是小浪。相信大家在初学一门新的知识点的时候都会遇到各种各样的问题,在网上找了一大堆的解决方案,最后还是无功而返,那么今天博主就记录一下在进行Redis的一些操作中遇到的问题~ 当我们好不容易安装好R…

js案例:打地鼠游戏(打灰太狼)

效果预览图 游戏规则 当灰太狼出现的时候鼠标左键点击灰太狼加10分,小灰灰出现的时候鼠标左键点小灰灰击减10分,不点击不减分不加分。 整体思路 1.把获取背景图片中每个地洞的位置,把所有位置放到一个数组中。 2.封装随机数函数,随…

Tomcat学习

一、入门 在webapp里面必须先创建一个文件夹,文件夹里面放的内容,才会被访问到。 创建一个javaweb项目后

【狂神说Java】Nginx详解

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

推荐系统笔记--基于物品的协同过滤(Item CF)

1--基本原理 Item CF的原理是根据物品的相似度来将新的物品推荐给用户;下图中用户对红色物品的感兴趣度为 [2, 1, 4, 3],红色物品与橙色物品的相似度为 [0.1, 0.4, 0.2, 0.6],因此可以计算出用户对橙色物品的感兴趣度。 Item CF的基本思想是&…

探寻知识的新路径——电大搜题助您开启学习新纪元

江西开放大学和广播电视大学一直以来都是许多自学者和职场人士追寻知识的圣地。然而,对于许多学子来说,学习的过程也常常充满了困惑和挑战。为了帮助这些学习者通过更高效、便捷的方式获取知识,江西开放大学推出了一款创新的学习工具——电大…

3DMAX如何渲染室内效果图?

这可能不是最好的教程,但对于3dmax初学者来说,它具有一定的学习价值和启示意义。 任何在建筑或室内设计领域工作并需要室内或外部空间“艺术家渲染”的人都会熟悉行业巨头Autodesk发布的3ds Max。 3ds Max是此类工作的默认标准,不是因为它在其他3D程序中无法完成,而是因为它…

联邦学习的梯度重构

联邦学习中的梯度出现挑战: 暴露原始训练数据的某些属性 利用生成对抗网络生成与私有训练图像类似的图片 尽管许多研究已经证实从梯度中重构原始数据的可能性,这些研究通常基于一个前提假设,即用户上传的梯度是全梯度。 联邦学习系统更倾…

力扣哈希表--总结篇

前言 五天写了八道题,有点懈怠,但还是有收获。 内容 一般哈希表都是用来快速判断一个元素是否出现在集合里。 为了实现高效的查找和访问,map通常会使用哈希表或红黑树等数据结构来存储键值对。什么时候用map,什么时候用数组&a…

智能一体化管网水位监测仪怎么样?

城市排水管网是城市正常运行的关键环节,这是地上和地下通道的连接点,一旦出现问题便会影响城市生命线建设的工程进展。在复杂的地下管道内想要了解水位数据,对于政府部门来讲是一个管理难题。如果可以采取智能产品在其中发挥作用,…

联想小新Pro14默认设置的问题

联想小新Pro14 锐龙版,Win11真的挺多不习惯的,默认配置都不符合一般使用习惯。 1、默认人走过自动开机。人机互动太强了; 2、默认短超时息屏但不锁屏,这体验很容易觉得卡机然后唤起,却又不用密码打开; 3…

Git分支与Git标签的介绍及其场景应用

目录 一、Git分支 1.1 定义 1.2 基本概念 1.3 特点与优势 1.4 Git分支操作命令 1.4.1 查看分支 1.4.2 创建分支 1.4.3 删除分支 1.4.4 切换分支 1.4.5 创建并切换到新建分支 1.5 场景应用 1.5.1 前期准备 1.5.2 具体操作 二、Git标签 2.1 定义 2.2 类型 2.3 标…

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

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

advanced-css: No.1

本套教程学习来自视频&#xff1a;https://www.bilibili.com/video/BV1n94y1o7yS/?p7&spm_id_frompageDriver&vd_sourceb79be8283df9418cb45941cc0bd583c6 案例 实现效果图 代码 HTML: <!DOCTYPE html> <html lang"en"><head><meta c…

【C++破局】泛型编程|函数模板|类模板

​作者主页 &#x1f4da;lovewold少个r博客主页 ⚠️本文重点&#xff1a;c模板初阶知识点讲解 &#x1f449;【C-C入门系列专栏】&#xff1a;博客文章专栏传送门 &#x1f604;每日一言&#xff1a;花有重开日&#xff0c;人无再少年 目录 前言 泛型编程 函数模板 函数模…

Leetcode—50.Pow(x,n)【中等】

2023每日刷题&#xff08;二十七&#xff09; Leetcode—50.Pow(x,n) 实现代码 double recurPow(double x, long long n) {if(n 1) {return x;}double res recurPow(x, n / 2);if(n % 2 1) {return x * res * res;} else {return res * res;} }double myPow(double x, int…