Python实现文件访问和加密GUI应用程序

Python实现文件访问和加密

简单的文本文件加密和解密的GUI应用程序,实现了一个简单的凯撒密码加密和解密算法

运行效果

1.实现UI界面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yG28ajb1-1720676735133)(https://i-blog.csdnimg.cn/direct/e5130309995b46279478a09dd013c689.png)]

2.打开原始文件,显示的文件名和文件内容正确。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QhQldndf-1720676735135)(https://i-blog.csdnimg.cn/direct/cd86486c99fd4250bd37fc7d89302ffb.png)]

3. 对照原始文件,加密文件正确

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V1pBHV4D-1720676735136)(https://i-blog.csdnimg.cn/direct/6e6b8a4bd0fe4d5bb280b5923f003047.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qekLqZO3-1720676735136)(https://i-blog.csdnimg.cn/direct/60a3b76e467d4d80b488498f2695cd68.png)]

4. 对照原始文件,解密文件一致

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5xguLPdD-1720676735137)(https://i-blog.csdnimg.cn/direct/7098e13c57e14097bf47933c7cf6a8f7.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Shk3FOQl-1720676735138)(https://i-blog.csdnimg.cn/direct/a21a85c406384c1cbe4a6b55d3babca9.png)]

5.测试使用不同的秘钥进行加密解密,结果正确

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vXF6sfK7-1720676735138)(https://i-blog.csdnimg.cn/direct/079dcb23a6454d7cb32778fa93fd8907.png)]

6. 对程序进行错误测试

6.1 没有打开文件直接进行加密,程序不应崩溃。
6.2 没有打开文件直接进行解密,程序不应崩溃。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nn4VMZwl-1720676735139)(https://i-blog.csdnimg.cn/direct/5ee623222a62464c867c57d42ab3ae12.png)]

6.3 没有设定秘钥直接进行加密,程序不应崩溃。
6.4 没有设定秘钥直接进行解密,程序不应崩溃。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g3dPN9bk-1720676735139)(https://i-blog.csdnimg.cn/direct/aeb6b2e4fa794dfab70def9f1d5b8b30.png)]

6.5 秘钥设定错误,进行加密,程序不应崩溃。
6.6 秘钥设定错误,进行解密,程序不应崩溃。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HD2QHdUp-1720676735141)(https://i-blog.csdnimg.cn/direct/4ae9ce7dd9534ea093f7f78fa84a2a46.png)]

代码

导入必要的库和模块

from tkinter import *:导入Tkinter库,这是Python的标准GUI库。
from tkinter.filedialog import askopenfilename, asksaveasfilename:导入Tkinter库中用于选择文件和保存文件的对话框功能。
from Caesar import Caesar:导入自定义的Caesar密码算法类。

FileEncryptWindow类:

创建了Tkinter窗口并添加了两个Frame容器,分别用于文件名输入和密钥输入。
在文件名输入区域,有一个Entry控件用于显示选择的文件名,以及一个"打开"按钮触发openFile方法来选择要加密/解密的文件。
在密钥输入区域,有一个Entry控件用于输入密钥(默认为3),以及"加密"和"解密"按钮分别触发encryptFile和decryptFile方法。
在窗口底部,有一个Text控件用于显示文件的内容。

class FileEncryptWindow():def __init__(self):window = Tk()frame1 = Frame(window)frame1.pack()labelFileName = Label(frame1, text="文件名:", )labelFileName.grid(row=0, column=0)self.fileName = StringVar()entryFileName = Entry(frame1, width=100, textvariable=self.fileName)entryFileName.grid(row=0, column=1)btnOpen = Button(frame1, text="打开", command=self.openFile)btnOpen.grid(row=0, column=2)frame2 = Frame(window)frame2.pack()labelKey = Label(frame2, text="密钥:", )labelKey.grid(row=1, column=0)self.key = StringVar()entryKey = Entry(frame2, textvariable=self.key)self.key.set("3")entryKey.grid(row=1, column=1)btnEncrypt = Button(frame2, text="加密", command=self.encryptFile)btnEncrypt.grid(row=1, column=2)btnDecrypt = Button(frame2, text="解密", command=self.decryptFile)btnDecrypt.grid(row=1, column=3)self.text = Text(window)self.text.pack()window.mainloop()def openFile(self):inFileName = askopenfilename()inFile = open(inFileName, "r")self.fileName.set(inFileName)self.fileContext = inFile.read()self.text.delete(1.0, END)self.text.insert(END, self.fileContext)inFile.close()def encryptFile(self):key = eval(self.key.get())caesar = Caesar(key)encryptStr = caesar.encrypt(self.fileContext)outfileName = asksaveasfilename()outFile = open(outfileName, "w")outFile.write(encryptStr)outFile.close()def decryptFile(self):key = eval(self.key.get())caesar = Caesar(key)decryptStr = caesar.decrypt(self.fileContext)outfileName = asksaveasfilename()outFile = open(outfileName, "w")outFile.write(decryptStr)outFile.close()

Caesar类

Caesar类提供了一个基本的凯撒密码加密和解密功能,可以与前面介绍的GUI应用程序一起使用。用户只需要输入密钥,就可以对文件内容进行加密和解密操作

  • encrypt(self, Text):实现对输入文本Text的加密。遍历输入文本的每个字符,如果字符在self.biao中出现,则找到该字符在self.biao中的索引位置。然后将该索引加上密钥self.miyao,并对字符集长度取余,得到密文字符在self.biao中的新索引。最后,将新索引对应的字符添加到cipText字符串中,形成最终的密文。返回加密后的密文字符串。
  • decrypt(self, cipText):实现了对输入密文cipText的解密。与encrypt方法类似,但是将索引减去密钥self.miyao,而不是加上。解密时,同样对字符集长度取余,得到明文字符在self.biao中的索引。将明文字符添加到clearText字符串中,形成最终的明文。方法返回解密后的明文字符串。
class Caesar:def __init__(self, miyao):self.miyao = miyaoself.biao = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 `-=~!@#$%^&*()_+,./<>?{}|[]\\;:\'\""def encrypt(self,Text):cipText = ""for char in Text:if char in self.biao:index = self.biao.find(char)cipherIndex = (index + self.miyao) % len(self.biao)cipText += self.biao[cipherIndex]return cipTextdef decrypt(self,cipText):clearText = ""for char in cipText:if char in self.biao:index = self.biao.find(char)clearIndex = (index - self.miyao) % len(self.biao)clearText += self.biao[clearIndex]return clearText

调用方法

# 创建Caesar类的实例,密钥为3
caesar = Caesar(3)
# 加密文本"Hello, world!"
encrypted_text = caesar.encrypt("Hello, world!")
print("Encrypted text:", encrypted_text)
# 解密密文
decrypted_text = caesar.decrypt(encrypted_text)
print("Decrypted text:", decrypted_text)

总代码

from tkinter import *
from tkinter.filedialog import askopenfilename
from tkinter.filedialog import asksaveasfilename
class Caesar:def __init__(self, miyao):self.miyao = miyaoself.biao = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 `-=~!@#$%^&*()_+,./<>?{}|[]\\;:\'\""def encrypt(self,Text):cipText = ""for char in Text:if char in self.biao:index = self.biao.find(char)cipherIndex = (index + self.miyao) % len(self.biao)cipText += self.biao[cipherIndex]return cipTextdef decrypt(self,cipText):clearText = ""for char in cipText:if char in self.biao:index = self.biao.find(char)clearIndex = (index - self.miyao) % len(self.biao)clearText += self.biao[clearIndex]return clearTextclass FileEncryptWindow():def __init__(self):window = Tk()frame1 = Frame(window)frame1.pack()labelFileName = Label(frame1, text="文件名:", )labelFileName.grid(row=0, column=0)self.fileName = StringVar()entryFileName = Entry(frame1, width=100, textvariable=self.fileName)entryFileName.grid(row=0, column=1)btnOpen = Button(frame1, text="打开", command=self.openFile)btnOpen.grid(row=0, column=2)frame2 = Frame(window)frame2.pack()labelKey = Label(frame2, text="密钥:", )labelKey.grid(row=1, column=0)self.key = StringVar()entryKey = Entry(frame2, textvariable=self.key)self.key.set("3")entryKey.grid(row=1, column=1)btnEncrypt = Button(frame2, text="加密", command=self.encryptFile)btnEncrypt.grid(row=1, column=2)btnDecrypt = Button(frame2, text="解密", command=self.decryptFile)btnDecrypt.grid(row=1, column=3)self.text = Text(window)self.text.pack()window.mainloop()def openFile(self):inFileName = askopenfilename()inFile = open(inFileName, "r")self.fileName.set(inFileName)self.fileContext = inFile.read()self.text.delete(1.0, END)self.text.insert(END, self.fileContext)inFile.close()def encryptFile(self):key = eval(self.key.get())caesar = Caesar(key)encryptStr = caesar.encrypt(self.fileContext)outfileName = asksaveasfilename()outFile = open(outfileName, "w")outFile.write(encryptStr)outFile.close()def decryptFile(self):key = eval(self.key.get())caesar = Caesar(key)decryptStr = caesar.decrypt(self.fileContext)outfileName = asksaveasfilename()outFile = open(outfileName, "w")outFile.write(decryptStr)outFile.close()FileEncryptWindow()

点击"打开"按钮,选择要加密或解密的文件。
在密钥输入框中输入密钥值(默认为3)。
点击"加密"或"解密"按钮,输出文件将被保存到用户选择的路径

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

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

相关文章

免费SSL证书申请指南

申请免费SSL证书的步骤相对直接&#xff0c;以下是基于当前可用信息的简明指南&#xff0c;特别是针对一些热门的免费SSL证书提供商&#xff0c;下面以JoySSL证书商为例&#xff1a; 1、注册账号 打开JoySSL官网&#xff0c;注册并填写邀请码230920&#xff0c;获取免费证书与…

RK系列UST-OTG切换为HOST模式或DEVICE模式的两种方法(DTS修改和软件命令修改)

1、修改DTS dr_mode: tells Dual-Role USB controllers that we want to work on a particular mode. Valid arguments are “host”, “peripheral” and “otg”. In case this attribute isn’t passed via DT, USB DRD controllers should default to OTG. usb20_otg: usb…

浅谈三车平台车型对比功能实用奖-竞品分析

目录&#xff1a; 一、项目背景 二、竞品概述 三、竞品目标功能对比 3.1、车型对比入口位置 3.2、车型对比首页 3.3、添加/删除车型功能 3.4、选择车型后功能对比 3.5、配置对比的功能 四、总结 一、项目背景 在汽车购买过程中&#xff0c;消费者经常面临着选择困难&…

六、数据可视化—Echars(爬虫及数据可视化)

六、数据可视化—Echars&#xff08;爬虫及数据可视化&#xff09; Echarts应用 Echarts Echarts官网&#xff0c;很多图表等都是我们可以 https://echarts.apache.org/zh/index.html 是百度自己做的图表&#xff0c;后来用的人越来越多&#xff0c;捐给了orange组织&#xf…

【好生意】畅捷通好生意各版本之间的区别

【畅捷通好生意各版本区别】 随着产品线的增加&#xff0c;不同版本之间存在差异。 以下是针对自己使用、研究过程中的记录。 完善ing 功能普及版标准版采购运费分摊没有单独的采购费用分摊单&#xff0c;但是支持随单分摊。支持

企业如何挑选策划公司,这些标准你了解吗?

诚然&#xff0c;在这个竞争激烈的市场环境下&#xff0c;企业有时候就像是站在十字路口的旅人&#xff0c;面前摆着的是一条条花钱却未必能看见收益的道路。 这时候&#xff0c;找一家对的策划公司就很重要&#xff0c;这里分享一点个人多年经验&#xff0c;希望对你有所帮助…

【精简教程】VSCode 连接 Remix

初始化 Node.js 项目 yarn init v1.22.19安装 Remix yarn add remix-project/remixd -g⚠️ 此时如果直接敲 remix&#xff0c;显示找不到这个命令。 使用 Node.js 来直接执行 remixd.js 文件 node node_modules\remix-project\remixd\src\bin\remixd.js&#x1f604; 连接上了…

安全极客团队荣获首届“矩阵杯”网络安全大赛人工智能挑战赛“三等奖”

近日&#xff0c;东半球规格高、规模大且奖金丰厚的网络安全顶级赛事——首届“矩阵杯”网络安全大赛在青岛国际会议中心圆满落幕。本次大赛设置了五大赛事&#xff0c;包括通用产品漏挖赛、国产软硬件安全检测赛、原创漏洞挖掘赛、人工智能&#xff08;大模型&#xff09;挑战…

【Linux】Windows平台使用gdb调试FFmpeg源码

FFmpeg是一个跨平台的多媒体库&#xff0c;有时需要在别的平台上进行开发和调试&#xff0c;记录一下在linux环境下使用gdb来调试FFmpeg源码的基本方式 1.可执行文件 在windows平台使用linux环境来调试FFmpeg源码&#xff0c;需要编译生成一个后缀有_g的exe文件&#xff0c;参…

HTTP中常见的状态码有哪些?

常用的包括以下几个&#xff1a; 200&#xff1a;表示客户端请求成功 201&#xff1a;请求成功,服务器创建了新资源。 204&#xff1a;无内容&#xff0c;服务器成功处理请求&#xff0c;但未返回任何内容。 206: 表示“部分内容”,当客户端请求一个资源的一部分时&#xff0c;…

YOLOv10部署教程,使用tensorRT部署,有转化和推理代码

YOLOv10部署教程,使用tensorRT部署,有转化和推理代码 一、使用平台1. 转化onnx模型转化trt模型模型推理全部的代码论文题目:YOLOv10: Real-Time End-to-End Object Detection 研究单位:清华大学 论文链接:http://arxiv.org/abs/2405.14458 代码链接:https://github.com/T…

每天一个数据分析题(四百二十三)- 置信区间

在给定的显著性水平下&#xff0c;某一特定的X水平上&#xff0c;总体Y分布的离散度越大&#xff0c;即σ^2越大&#xff0c;则 A. 预测区间越宽&#xff0c;精度越低 B. 预测区间越宽&#xff0c;预测误差越小 C. 预测区间越窄&#xff0c;精度越高 D. 预测区间越窄&#…

如何在idea安装git,使用gitee?

一、什么是git&#xff0c;git与gitee、GitHub的关系&#xff1f; 1.什么是git&#xff1f; Git 是一个开源的分布式版本控制系统&#xff0c;用于企业项目中程序员协同开发。 2.git与gitee、GitHub的关系是什么&#xff1f; git &#xff1a;Git是一种版本控制系统&#x…

看完这篇,你的服务设计能力将再次进化!

引言 在当今快速演变的技术场景中&#xff0c;服务设计不仅仅是遵循通用的设计规范和最佳实践的问题&#xff0c;它更深层次地触及到如何在满足这些标准的同时&#xff0c;确保服务能够灵活适应未来的变化、满足用户的期望。本篇文章旨在探讨在遵循通用设计规范之外&#xff0…

Three.js相机简明教程

相机校准是 3D 计算机图形学中的一个基本概念&#xff0c;涉及设置虚拟相机以模拟真实世界相机的视角和行为。在 Three.js&#xff08;一种流行的 3D 渲染 JavaScript 库&#xff09;中&#xff0c;了解相机校准对于创建逼真且身临其境的 3D 场景至关重要。在本文中&#xff0c…

UML类图的建立过程

1. 概念层类图 概念层的类图描述的是现实世界中对问题领域的概念理解&#xff0c;类图中表达的类与现实世界的问题领域中的实际事物有着明显的对应关系&#xff0c;类之间的关系也与问题领域中实际事物之间的关系有着明显的对应关系。在概念层类图阶段很少考虑或者几乎不需要考…

07-7.5.1 散列表的基本概念

&#x1f44b; Hi, I’m Beast Cheng &#x1f440; I’m interested in photography, hiking, landscape… &#x1f331; I’m currently learning python, javascript, kotlin… &#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…

指令v-el的作用是什么

在Vue.js的早期版本中&#xff08;特别是Vue 1.x版本&#xff09;&#xff0c;v-el 指令被用来给元素注册引用信息&#xff08;即DOM元素的引用&#xff09;。这样&#xff0c;开发者就可以在Vue实例的方法中直接访问到这个DOM元素。然而&#xff0c;需要注意的是&#xff0c;从…

28.IP核理论知识(Xilinx)

&#xff08;1&#xff09;ip核是什么&#xff1f; IP&#xff08;Intellectual Property&#xff09;即知识产权&#xff0c;在半导体产业中&#xff0c;将IP核定义为“用于ASIC或FPGA中的预先设计好的电路功能模块”&#xff0c;简而言之&#xff0c;这里的IP即电路功能模块。…

Element轮播图组件切换太单调?手把手带你重写切换效果

前言&#xff1a; 最近在逛山东博物馆网站的时候&#xff0c;发现该网站主页淡入淡出的轮播图非常的优雅&#xff0c;所以就想来复刻一下&#xff0c;也算是对组件进行了二次的封装和修改 工具准备&#xff1a; Vue3Element Plus走马灯组件 注意事项&#xff1a; Element …