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

news/2024/9/11 2:53:35/ 标签: 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() 方法

代码

python">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.ppmy.cn/news/1474563.html

相关文章

FlutterWeb渲染模式及提速

背景 在使用Flutter Web开发的网站过程中&#xff0c;常常会遇到不同浏览器之间的兼容性问题。例如&#xff0c;在Google浏览器中动画和交互都非常流畅&#xff0c;但在360浏览器中却会出现卡顿现象&#xff1b;在Google浏览器中动态设置图标颜色正常显示&#xff0c;而在Safa…

Linux下解压.tar.gz文件

.tar.gz 是一种常用的压缩包格式&#xff0c;尤其在Unix、Linux以及macOS系统中非常普遍。这个格式结合了两种不同的功能&#xff1a; Tar (.tar): “Tar” 是“Tape Archive”的缩写&#xff0c;最初是为了将数据备份到磁带上而设计的。Tar命令可以将多个文件和目录打包成一个…

markdown文件转pdf

将Markdown文件转换为PDF可以通过多种方法实现&#xff0c;包括使用Visual Studio Code、在线工具、以及命令行工具。 使用Visual Studio Code&#xff1a; 1.安装“Markdown PDF”插件&#xff1a;在VS Code中&#xff0c;通过点击左侧菜单栏的扩展图标&#xff0c;搜…

系统迁移从CentOS7.9到Rocky8.9

我有两台阿里云上的服务器是CentOS7.9&#xff0c;由于CentOS7已经停止支持&#xff0c;后续使用的话会有安全漏洞&#xff0c;所以需要尽快迁移&#xff0c;个人使用的话目前兼容性好的还是RockyLinux8&#xff0c;很多脚本改改就能用了。 一、盘点系统和迁移应用 查看当前系…

聚观早报 | 蚁天鉴2.0发布;理想汽车推送无图NOA

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 7月8日消息 蚁天鉴2.0发布 理想汽车推送无图NOA 特斯拉推送FSD v12.4.3 iQOO Neo9s Pro配色公布 百川智能AI健康…

centos9中mysql指令提示解决方案

CentOS 9 中没有 MySQL 的官方插件&#xff0c;因为 MySQL 不是 CentOS 的默认数据库&#xff0c;它是 MariaDB 的一部分。 如果想要一个命令行提示的 MySQL 客户端&#xff0c;可以使用第三方工具 &#xff0c;如mycli 首先&#xff0c;确保已经安装了 MySQL&#xff0c;且操…

7月10日学习打卡,环形链表+栈OJ

前言 大家好呀&#xff0c;本博客目的在于记录暑假学习打卡&#xff0c;后续会整理成一个专栏&#xff0c;主要打算在暑假学习完数据结构&#xff0c;因此会发一些相关的数据结构实现的博客和一些刷的题&#xff0c;个人学习使用&#xff0c;也希望大家多多支持&#xff0c;有…

解决鸿蒙开发中克隆项目无法签名问题

文章目录 问题描述问题分析解决方案 问题描述 在一个风和日丽的早晨&#xff0c;这是我学习鸿蒙开发的第四天&#xff0c;把文档过了一遍的我准备看看别人的项目学习一下&#xff0c;于是就用git去clone了一个大佬的开源项目&#xff0c;在签名的时候遇到了问题&#xff1a; h…

Visual Studio编译优化选项

目录 /O1 和 /O2 /Ox 内联函数 虚函数优化 代码重排 循环优化 链接时间优化 代码分割 数学优化 其他优化选项 在Visual Studio中&#xff0c;编译优化选项是用于提高程序性能的重要工具。编译器提供了多种优化级别和选项&#xff0c;可以根据不同的需要进行选择。 在…

(Windows环境)FFMPEG编译,包含编译x264以及x265

本文使用 MSYS2 来编译 ffmpeg 一、安装MSYS2 MSYS2 是 Windows 下的一组编译套件&#xff0c;它可以在 Windows 系统中模拟 Linux 下的编译环境&#xff0c;如使用 shell 运行命令、使用 pacman 安装软件包、使用 gcc (MinGW) 编译代码等。 MSYS2 的安装也非常省心&#x…

如何在vue的项目中导入阿里巴巴图标库

阿里巴巴矢量图标库官网&#xff1a;iconfont-阿里巴巴矢量图标库 选择你喜欢的图标&#xff0c;添加入库 点击添加至项目&#xff0c;并新建文件夹&#xff0c;点击确定 选择font-class&#xff0c;点击生成代码 代码生成后&#xff0c;在网站上打开 全选复制到style 点击复制…

大连外贸建站公司wordpress主题模板

Robonaut萝卜纳特WP外贸站模板 适合用于工业机器人公司出口做外贸搭建公司官方网站使用的WordPress模板。 https://www.jianzhanpress.com/?p7091 优衣裳WordPress外贸建站模板 简洁的wordpress外贸独立站模板&#xff0c;适合服装、衣服、制衣外贸公司搭建公司官方网站使用…

【Python】Requests 库使用示例

本文使用Pythonrequests库对微博页面进行数据抓取和简单的数据清洗 使用Requests库进行网络爬虫 requests是一个Python的HTTP客户端库&#xff0c;用于发送HTTP请求。它简单易用&#xff0c;同时提供了足够的功能来处理各种网络请求。 1. 安装requests库 在Python中安装req…

【集成平台】大数据集成平台建设方案(原件word)

基础支撑平台主要承担系统总体架构与各个应用子系统的交互&#xff0c;第三方系统与总体架构的交互。需要满足内部业务在该平台的基础上&#xff0c;实现平台对于子系统的可扩展性。基于以上分析对基础支撑平台&#xff0c;提出了以下要求&#xff1a; 基于平台的基础架构&…

从 Github 安装 R packages 不完全指南

前言 R语言&#xff0c;一个被广泛使用的统计计算和数据分析工具。在日常使用过程中&#xff0c;需要安装实现各种功能、来自各种渠道的工具包&#xff08;packages&#xff09;比如&#xff1a;CRNA或者Github。很多包已经发布在 CRAN 上&#xff0c;使用 install.packages(&q…

【JavaScript脚本宇宙】提升用户体验:探索 JavaScript 库中的浏览器特性支持检测

深入探讨JavaScript库&#xff1a;功能、配置与应用场景 前言 在现代的Web开发中&#xff0c;JavaScript库扮演着至关重要的角色&#xff0c;帮助开发人员简化代码、提高效率、实现更好的用户体验。本文将探讨几个常用的JavaScript库&#xff0c;包括模块加载库、数据绑定库和…

JMeter之脚本录制

前言&#xff1a; 对于一些JMeter初学者来说&#xff0c;录制脚本可能是最容易掌握的技能之一。虽然我不建议录制性能脚本&#xff08;因为录制的脚本比较混乱&#xff0c;必须要通过二次处理才可正常使用&#xff09;&#xff0c;但有时做总比不做要好&#xff0c;是吧…

安卓微信8.0之后如何利用缓存找回的三天之前不可见的朋友圈图片

安卓微信8.0之后如何利用缓存找回的三天之前不可见的朋友圈图片 复习了下安卓程序的知识&#xff0c;我们会了解到&#xff0c;安卓程序清楚数据的时候有两个选项 一个是清除全部数据一个是清除缓存。 清除全部数据表示清除应用数据缓存。 对于安卓微信8.0之后而言&#xff0…

判断对象能否回收的两种方法,以及JVM引用

判断对象能否回收的两种方法&#xff1a;引用计数算法&#xff0c;可达性分析算法 引用计数算法&#xff1a;给对象添加一个引用计数器&#xff0c;当该对象被其它对象引用时计数加一&#xff0c;引用失效时计数减一&#xff0c;计数为0时&#xff0c;可以回收。 特点&#xf…

Spring Boot中的数据迁移策略

Spring Boot中的数据迁移策略 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 一、引言 在软件开发的过程中&#xff0c;经常会遇到需要修改数据库结构、迁移…