Python图形用户界面的文本文件加密工具

Python图形用户界面的文本文件加密工具

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

设计方案

DES.py

DESAlgorithm 类负责管理密钥并提供加密和解密的功能。
在构造函数中,我们初始化了一个 8 字节的密钥。
encrypt 方法的实现如下:

  1. 首先,创建一个 DES 加密器,并指定 ECB 模式。
  2. 然后,使用 pad 函数对明文字符串进行填充,使其长度为 DES 块大小(8 字节)的整数倍。
  3. 最后,使用加密器的 encrypt 方法对填充后的明文进行加密,并返回加密后的二进制数据。
    decrypt 方法的实现如下:
  4. 首先,创建一个 DES 解密器,并指定 ECB 模式。
  5. 然后,使用解密器的 decrypt 方法对加密后的二进制数据进行解密。
  6. 最后使用 unpad 函数去除填充,并将解密后的二进制数据转换为明文字符串。

create_DES_cipher 函数用于创建 DES 加密/解密器,并接受密钥和工作模式作为输入。
pad 和 unpad 函数分别用于对数据进行填充和去除填充。
创建了一个 8 字节的密钥。
创建 DESAlgorithm 实例,并使用该实例对明文进行加密和解密。
打印出加密后的数据和解密后的数据,以验证加密和解密的正确性。

CAREASR.py

Caesar 类用来实现凯撒密码加密和解密。
在初始化函数 init 中:

  • 接受一个 miyao 参数,表示密钥(位移量)。
  • 创建了一个 biao 字符串,包含了 26 个大写字母、26 个小写字母、10 个数字以及一些常用的标点符号,这个字符串将作为字符集使用。

encrypt 方法实现了加密功能:

  1. 初始化一个空字符串 cipText 作为加密结果。
  2. 遍历输入的 Text 字符串。
  3. 对于每个字符,如果它在 biao字符集中,则查找它在 biao 中的索引 index。
  4. 计算新的索引 cipherIndex 为 (index + miyao) % len(biao)。
  5. 将 biao 中对应新索引的字符添加到 cipText 中。
  6. 最终返回加密后的字符串 cipText。

decrypt 方法实现了解密功能:

  1. 初始化一个空字符串 clearText 作为解密结果。
  2. 遍历输入的 cipText 字符串。
  3. 对于每个字符,如果它在 biao字符集中,则查找它在 biao 中的索引 index。
  4. 计算新的索引 clearIndex 为 (index - miyao) %len(biao)。
  5. 将 biao 中对应新索引的字符添加到 clearText 中。
  6. 最终返回解密后的明文字符串 clearText。

Main.py

定义 FileEncryptWindow 类:
初始化方法:
1.创建 Tk 窗口
2.设置默认算法为 None
3.调用 create_menu() 方法
4.调用 create_toolbar() 方法
5.调用 create_text_editor() 方法
6.运行 mainloop()

create_menu() 方法:创建菜单栏创建文件菜单添加打开、加密、解密和退出选项
create_toolbar() 方法:创建工具栏 Frame添加文件名输入框添加打开按钮添加密钥输入框添加算法选择下拉菜单添加加密按钮添加解密按钮
create_text_editor() 方法:创建文本编辑器 Text 控件将其设置为填充并扩展
open_file() 方法:打开文件对话框读取文件内容将文件内容显示在文本编辑器中
encrypt_file() 方法:检查是否已打开文件根据选择的算法执行加密操作将加密后的数据保存到新文件
decrypt_file() 方法:检查是否已打开文件根据选择的算法执行解密操作将解密后的数据保存到新文件
run() 方法:运行 mainloop()

如果是主程序:
创建 FileEncryptWindow 对象
调用 run() 方法

代码

from tkinter import *
from tkinter.filedialog import askopenfilename, asksaveasfilename
from tkinter.messagebox import showerror
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):self.window = Tk()self.caesar = Noneself.create_menu()self.create_toolbar()self.create_text_editor()self.window.mainloop()def create_menu(self):menubar = Menu(self.window)self.window.config(menu=menubar)file_menu = Menu(menubar, tearoff=0)file_menu.add_command(label="打开", command=self.open_file)file_menu.add_command(label="加密", command=self.encrypt_file)file_menu.add_command(label="解密", command=self.decrypt_file)file_menu.add_separator()file_menu.add_command(label="退出", command=self.window.quit)menubar.add_cascade(label="文件", menu=file_menu)def create_toolbar(self):toolbar = Frame(self.window)toolbar.pack(fill=X)self.file_name = StringVar()entry_file_name = Entry(toolbar, textvariable=self.file_name)entry_file_name.pack(side=LEFT, padx=5, pady=5)btn_open = Button(toolbar, text="打开", command=self.open_file)btn_open.pack(side=LEFT, padx=5, pady=5)self.key = StringVar()entry_key = Entry(toolbar, textvariable=self.key)entry_key.pack(side=LEFT, padx=5, pady=5)self.key.set("3")btn_encrypt = Button(toolbar, text="加密", command=self.encrypt_file)btn_encrypt.pack(side=LEFT, padx=5, pady=5)btn_decrypt = Button(toolbar, text="解密", command=self.decrypt_file)btn_decrypt.pack(side=LEFT, padx=5, pady=5)def create_text_editor(self):self.text = Text(self.window)self.text.pack(fill=BOTH, expand=True)def open_file(self):in_file_name = askopenfilename()if in_file_name:try:with open(in_file_name, "r") as in_file:self.file_name.set(in_file_name)self.file_content = in_file.read()self.text.delete(1.0, END)self.text.insert(END, self.file_content)except Exception as e:showerror("错误", str(e))def encrypt_file(self):if not self.file_name.get():showerror("错误", "请先打开文件")returnif not self.key.get().isdigit():showerror("错误", "密钥必须是整数")returntry:key = int(self.key.get())self.caesar = Caesar(key)encrypted_text = self.caesar.encrypt(self.file_content)out_file_name = asksaveasfilename()if out_file_name:with open(out_file_name, "w") as out_file:out_file.write(encrypted_text)except Exception as e:showerror("错误", str(e))def decrypt_file(self):if not self.file_name.get():showerror("错误", "请先打开文件")returnif not self.key.get().isdigit():showerror("错误", "密钥必须是整数")returntry:key = int(self.key.get())if not self.caesar:self.caesar = Caesar(key)decrypted_text = self.caesar.decrypt(self.file_content)out_file_name = asksaveasfilename()if out_file_name:with open(out_file_name, "w") as out_file:out_file.write(decrypted_text)except Exception as e:showerror("错误", str(e))FileEncryptWindow()

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

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

相关文章

电焰灶:烹饪性能的深度剖析

在如今众多的厨房炉灶选择中&#xff0c;华火电焰灶以其独特的技术和性能吸引了不少消费者的目光。那么&#xff0c;华火电焰灶的综合烹饪性能究竟如何呢&#xff1f;让我们一起来深入探究。 首先&#xff0c;从火力方面来看&#xff0c;华火电焰灶展现出了强大的优势。其火焰强…

systemctl命令,启动服务,停止服务,查看服务状态,设置开机自启。

systemctl 是用于与 systemd 初始化系统和服务管理器进行交互的命令行工具。systemd 是许多 Linux 发行版默认的系统和服务管理器&#xff0c;它负责启动和管理系统服务。 以下是一些常用的 systemctl 命令&#xff1a; 启动服务: sudo systemctl start <service_name> …

VS2019使用C#写窗体程序技巧(1)

1、打开串口 private void button1_Click(object sender, EventArgs e){myPort cmb1.Text;mybaud Convert.ToInt32(cmb2.Text, 10);databit 8;parity Parity.None;stopBit StopBits.One;textBox9.Text "2";try{sp new SerialPort(myPort, mybaud, parity, dat…

LLMs的基本组成:向量、Tokens和嵌入

编者按&#xff1a;随着人工智能技术的不断发展&#xff0c;大模型&#xff08;语言、视觉&#xff0c;或多模态模型&#xff09;已成为当今AI应用的核心组成部分。这些模型具有处理和理解自然语言等模态输入的能力&#xff0c;推动了诸如聊天机器人、智能助手、自动文本生成等…

私域社群的组织及运营角色定位、分工

私域社群运营是一个涉及多个角色和职能的复杂过程&#xff0c;每个角色都有其特定的职责和目标。以下是一些常见角色及其职能内容的概述&#xff1a; 产品经理&#xff08;Product Manager&#xff09; 负责私域社群产品的规划、设计和迭代。理解用户需求&#xff0c;收集用户反…

开源项目的发展趋势之托管平台

引言 回溯至十五年前的求学时光&#xff0c;当我们初涉编程的浩瀚海洋&#xff0c;面对程序设计这一崭新挑战&#xff0c;曾渴望能有一份现成的源码作为启航的灯塔。然而&#xff0c;在那个时代&#xff0c;除了有限的SDK资源外&#xff0c;寻觅到高质量、可借鉴的源代码并非易…

springboot服装购物商城系统-计算机毕业设计源码35058

摘要 服装购物商城系统小程序&#xff0c;依托Spring Boot框架的强大支持&#xff0c;为用户呈现了一个功能丰富、体验流畅的在线购物平台。该系统不仅涵盖了商品展示、用户注册登录、购物车管理、订单处理、支付集成等核心购物流程&#xff0c;还引入了个性化推荐算法&#xf…

药品稳定性试验箱:确保药物有效期的关键设备

关键词&#xff1a; 药品稳定性试验箱、 药品稳定性试验模拟器、人造太阳 摘要&#xff1a;药品稳定性试验箱是制药行业重要的研究工具&#xff0c;主要用于在模拟气候环境中评估药物稳定性&#xff0c;以确定药物的有效期和影响稳定性的因素。该设备由温湿度控制系统、光照系…

【EasyExcel】根据单元格内容自动调整列宽

1.自定义Excel列宽样式策略类 import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.metadata.Head; import com.alibaba.excel.metadata.data.WriteCellData; import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; import com.alibaba.e…

NodeJS校园点餐系统-计算机毕业设计源码56979

摘 要 近年来&#xff0c;随着移动互联网的迅猛发展&#xff0c;微信小程序作为一种轻量级应用形式逐渐受到人们的关注和喜爱。在此背景下&#xff0c;各行各业开始向微信小程序上线他们的服务&#xff0c;其中包括餐饮行业&#xff0c;在校园内&#xff0c;学生、教职工和访客…

通用代码生成器模板体系,域对象,枚举和动词算子

通用代码生成器模板体系&#xff0c;域对象&#xff0c;枚举和动词算子 通用代码生成器或者叫动词算子式通用目的代码生成器是一组使用Java编写的通用代码生成器。它们的原理基于动词算子和域对象的笛卡尔积。它们没有使用FreeMarker和或者Velocity等现成的文件式模板引擎。而…

OpenResty程序如何连接开启了TLS的Redis?

目录 OpenResty 项目如何连接开启了 TLS 的 Redis Kong 插件如何连接开启了 TLS 的 Redis OpenResty 是一个基于 Nginx 和 Lua 的 Web 应用框架&#xff0c;允许开发者通过 Lua 脚本对 Nginx 的配置和行为进行扩展。当 OpenResty 需要连接到一个开启了 TLS 的 Redis 服务器时…

传统的springboot项目中,如何进行添加自定义静态资源访问路径实现对静态资源的访问?

如何配置可以实现在浏览器中配置路径实现对resource资源路径下的index.html个性化定制访问路径 要在Spring Boot项目中配置使特定前缀访问静态资源&#xff0c;可以在application.yml文件中配置路径映射。以下是一个示例配置&#xff1a; 打开你的application.yml文件&#xf…

Kylin的优缺点

Kylin&#xff08;Apache Kylin&#xff09;是一个开源的分布式分析数据仓库&#xff0c;专为处理大规模数据集和提供快速的多维分析&#xff08;OLAP&#xff09;能力而设计。以下是Kylin的主要优点和缺点&#xff1a; 优点 高性能&#xff1a; 快速查询&#xff1a;Kylin通过…

Vue3响应系统的作用与实现

副作用函数的执行会直接或间接影响其他函数的执行。一个副作用函数中读取了某个对象的属性&#xff0c;当该属性的值发生改变后&#xff0c;副作用函数自动重新执行&#xff0c;这个对象就是响应式数据。 1 响应式系统的实现 拦截对象的读取和设置操作。当读取某个属性值时&a…

死灰复燃的 LockBit, “现身说法”计算机安全的重要性

LockBit 死灰复燃 2024年2月&#xff0c;一场全球性的名为 “Cronos 行动” 的执法行动夺取了对 LockBit 勒索组织基础设施的控制权并扰乱了其运营。 但是&#xff0c;就像希腊神话中的九头蛇一样&#xff0c;砍掉一个 LockBit 的头并不重要——它可以迅速再生成多个新的头。…

南京邮电大学运筹学课程实验报告3 整数规划问题求解 指导

一、题目描述 实验三 整数规划问题求解    实验属性&#xff1a; 设计型    实验目的 1&#xff0e;理解图的整数规划问题概念&#xff1b; 2&#xff0e;掌握运筹学软件的使用方法&#xff1b; 3. 掌握整数规划问题求解原理和方法。 实…

傅里叶变换DFT\FFT

文章目录 直流分量&#xff08;频率为0&#xff09;傅立叶原理离散频率栅栏效应原理方案&#xff1a;提高采样间隔&#xff08;频率分辨力&#xff09; 直流分量&#xff08;频率为0&#xff09; 指信号中的直流成分&#xff0c;信号的直流分量就是信号的平均值&#xff0c;它…

MES系统助力塑料制品行业数字化转型

注塑MES系统助力工厂生产力提升具体体现在&#xff1a;覆盖生产全流程&#xff1b;数据自动收集、科学规划排产&#xff1b;优化配送模型、平衡物流运转&#xff1b;严格把控品质、异常自动分析&#xff1b;实时监控设备&#xff0c;保证正常运转&#xff1b;产品快速追溯&…

c#获取本机的MAC地址(附源码)

在前一次的项目中&#xff0c;突然用到了这个获取本机的MAC地址&#xff0c;然后就研究了一下&#xff0c;记录下来&#xff0c;防止以后再用到&#xff0c; 使用winfrom做的&#xff0c;界面一个button&#xff0c;一个textBox,点了button以后给textBox赋值显示mac地址 附上源…