Python小工具——开发一个加密解密的小应用 windows下可执行文件exe制作

news2024/11/18 19:57:58

在这里插入图片描述

前言

本篇博客是python开发的使用案例博客,结合一些具体的案例进行阐述,本篇博客介绍如何开发一个专属的加密解密windows小应用。

其他相关的博客文章如下:

  • Python开发——工具篇 & Pycharm的相关配置,Python相关操作 & 持续更新

目录

  • 前言
  • 引出
  • 整体设计
    • 流程设计
    • 源码
  • 制作成可执行exe文件
    • icon图标
    • 比如:加个icon图标
    • 制作成exe
  • 使用指南
    • 1.双击exe运行
    • 2.选中要加密的文件
    • 3.加密文件发送
    • 4.接收方进行解密
  • 总结

引出


基于python开发小工具,加密解密的exe文件,可以用于加密图片,word,压缩包等。

整体设计

流程设计

整体流程为运行程序,打开文件资源管理器,进行文件的选择
(1)如果选择的是要加密的文件,比如.zip、word文件等;则进行加密,加密后的文件后缀为PET;
(2)如果要进行解密,则选择要解密的文件,选择后缀为PET的文件,程序会进行解密;
在加密或解密完成后都会重新打开文件目录,方面进行发送

注:加密和解密后的文件都在同一位置

源码

以下为程序源码,主要用到了窗口,hashlib等相关的包

# encoding:utf-8
import os
import hashlib
import subprocess
from tkinter import Tk
from tkinter.filedialog import askopenfilename

# 默认的加密和解密的密匙
password = "3927"


def getFilePath():
    """
    通过点击鼠标获取要加密的文件
    :return: 要加密的文件的文件路径 + 文件名
    """
    # 创建一个Tkinter窗口
    root = Tk()
    root.withdraw()

    # 弹出文件选择对话框
    file_path = askopenfilename()

    # 打印所选文件的路径
    print(file_path)
    return file_path


def encodeAndDecode(psd, readFile, saveFile):
    """
    进行加密和解密的方法
    :param psd: 加密和解密的密匙,字符串
    :param readFile: 要加密或者解密的文件
    :param saveFile: 保存的文件
    :return:
    """
    openFile = open(readFile, "rb")  # 读取文件
    saveFile = open(saveFile, "wb")  # 写入文件
    # 使用MD5进行加密(双层加密)
    hl = hashlib.md5()
    hl.update(psd.encode(encoding='utf-8'))
    passwordList = hl.hexdigest()

    hl.update(passwordList.encode(encoding='utf-8'))
    passwordList2 = hl.hexdigest()
    passwordData = passwordList + passwordList2

    count = 0  # 索引
    for now in openFile:
        for nowByte in now:
            # 循环遍历出密码的ord值,单个循环
            newByte = nowByte ^ ord(passwordData[count % len(passwordData)])
            count += 1
            saveFile.write(bytes([newByte]))  # 转换
    # 关闭流
    openFile.close()
    saveFile.close()


if __name__ == '__main__':
    print("---------这是一个软件加密工具--------------")
    print("Tips: \n 【加密后的文件后缀统一为PET,请勿修改文件后缀名】")
    print(" 【暂不支持文件夹加密,请选择文件】")
    print(" 【加密后的文件与选择的文件同目录】")
    print("---------文件加密工具 v0.0.1--------------")

    openfilePath = getFilePath()  # input("输入文件路径:")
    print("get: ", openfilePath)

    if 'PET' in openfilePath.split(".")[-1][-3:]:
        # 进行解密
        saveFilePath = str(openfilePath)[:-3]
        print("进行文件的解密", saveFilePath)
        encodeAndDecode(password, openfilePath, saveFilePath)
    else:
        # 进行加密
        saveFileName = os.path.basename(openfilePath) + "PET"
        saveFilePath = os.path.dirname(openfilePath) + "/" + saveFileName
        print("进行文件的加密: ", saveFilePath)
        encodeAndDecode(password, openfilePath, saveFilePath)

    # 程序最后定位到指定位置
    print("打开文件保存的位置")
    pathGet = os.path.dirname(openfilePath)
    path = str(pathGet).replace('/', "\\")
    subprocess.Popen(f'explorer {path}')

制作成可执行exe文件

icon图标

在制作执行文件exe的时候,可以设置一下icon图标,这样看起来比较高大上

https://www.iconfinder.com/

在这里插入图片描述

比如:加个icon图标

改进后:pyinstaller -F --icon=subway.ico hello.py

在这里插入图片描述

制作成exe

详细的步骤参考博客:
Python封装——如何把python代码打包成一个可执行的.exe文件,Pyinstaller

PyInstaller 支持的常用选项
-h,–help产生单个的可执行文件
-D,–onedir产生一个目录(包含多个文件)作为可执行程序
-a,–ascii不包含 Unicode 字符集支持
-d,–debug产生 debug 版本的可执行文件
-w,–windowed, --noconsolc指定程序运行时不显示命令行窗口(仅对 Windows 有效)
-c,–nowindowed, --console指定使用命令行窗口运行程序(仅对 Windows 有效)
-o DIR,–out=DIR指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件
-p DIR,–path=DIR设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。
也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径
-n NAME, --name=NAME指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字
pyinstaller -F --icon=my.ico securityTool.py

在这里插入图片描述

使用指南

1.双击exe运行

制作成exe文件后,双击运行,后台会显示一些日志,在弹出的文件资源选择框中选择要加密的文件;

在这里插入图片描述

2.选中要加密的文件

选中要加密的文件后,程序会自动进行加密,加密后的文件会放在同一目录中;

在这里插入图片描述

3.加密文件发送

加密后的文件发送给接收方即可

在这里插入图片描述

4.接收方进行解密

接收方运行exe文件,然后选择要解密的文件,后缀为PET,选择后程序会进行解密,解密后的文件与被解密的文件在同一目录下。

在这里插入图片描述

解密成功

在这里插入图片描述


总结

基于python开发小工具,加密解密的exe文件。

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

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

相关文章

OpenAI GPTs 到底是怎么工作的?

▼最近直播超级多,预约保你有收获 今晚直播:《GPTs 构建应用程序案例实现》 —1— GPTs 是如何工作的? OpenAI 官方对 GPTs 的定义是,用户为特定目的创建的 ChatGPT 版本。 GPTs 结合了技能说明、外部知识库和目前可见的 GPT 的任…

【消息中间件】Rabbitmq消息可靠性、持久化机制、各种消费

原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言常见用法1.消息可靠性2.持久化机制3.消息积压批量消费:增加 prefetch 的数量,提高单次连接的消息数并发消费:多部…

最广泛应用的金融风控算法-评分卡

欢迎关注主页个人介绍及相关链接,获取更多算法源码材料 2023数据资源入表白皮书,推荐系统源码下载-CSDN博客 用友BIP数据资产入表解决方案白皮书,推荐系统源码下载-CSDN博客 背景 信用是一切社会金融体系的根本,有了每个人的信…

计算机毕业设计---ssm+mysql+jsp实现的校园二手市场交易平台源码

项目介绍 本系统主要实现的功能有: 前台:(1)二手物品信息查看、搜索。 (2)学生注册登录、个人信息修改。 (3)二手物品信息发布、编辑。 (4)二手物品评论、回…

axios进行图片上传组件封装

文章目录 前言图片上传接口(axios通信)图片上传使用upload上传头像效果展示总结 前言 node项目使用 axios 库进行简单文件上传的模块封装。 图片上传接口(axios通信) 新建upload.js文件,定义一个函数,该函数接受一个上传路径和一…

Gateway集成方法以及拦截器和过滤器的使用

前提&#xff1a;请先创建好一个SpringBoot项目 1. 引入依赖 SpringCloud 和 alibabaCloud 、 SpringBoot间对版本有强制要求&#xff0c;我使用的springboot是3.0.2的版本。版本对应关系请看&#xff1a;版本说明 alibaba/spring-cloud-alibaba Wiki GitHub <dependency…

python脚本抢各大平台大额优惠卷

文章目录 python脚本抢各大平台大额优惠卷写在前面准备阶段一、所需工具二、ChromeDriver下载教程 三、Seleuinm安装1、打开cmd&#xff0c;输入如下命令 开始抢券淘宝脚本京东抢购脚本 python脚本抢各大平台大额优惠卷 写在前面 当电商平台上演盛大的购物狂欢时&#xff0c;如…

MongoDB ReplicaSet 部署

文章目录 前言1. 环境准备2. 生成密钥3. 配置参数4. 创建 ReplicaSet5. 副本集维护5.1 新增成员5.2 移除节点5.4 主节点降级5.5 阻止选举5.6 允许副本节点读5.7 延迟观测 6. 连接副本集 后记 前言 本篇文章介绍 MongoDB ReplicaSet 如何搭建&#xff0c;及常用的维护方法。 1…

VScode跑通Remix.js官方的contact程序开发过程

目录 1 引言 2 安装并跑起来 3 设置根路由 4 用links来添加风格资源 ​5 联系人路由的UI 6 添加联系人的UI组件 7 嵌套路由和出口 8 类型推理 9 Loader里的URL参数 10 验证参数并抛出响应 书接上回&#xff0c;我们已经跑通了remix的quick start项目&#xff0c;接下…

【JVM】虚拟机的组成+字节码文件组成+类的生命周期

什么是JVM&#xff1f; JVM 本质上是一个运行在计算机上的程序&#xff0c;他的职责是运行Java字节码文件。 JVM的功能 1.解释和运行&#xff1a;对字节码文件中的指令实时的解释成机器码让计算机执行。 2.内存管理&#xff1a;自动为对象、方法等分配内存&#xff0c;自动…

JAVA8项目升级JDK17指南

JAVA8项目升级JDK17指南 JAVA8项目升级JDK17指南一、模块化对反射的影响二、删除的内置类 JAVA8项目升级JDK17指南 随着SpringBoot2.7的发布&#xff0c;支持jdk8~jdk21。Springboot3.X发布&#xff0c;最低需要jdk17。升级jdk17是大势所趋。 参考1&#xff1a;重磅&#xff…

K8S 外部访问配置、 Ingress、NodePort

将K8S部署应用提供给外部访问一般有三种方式&#xff1a; NodePort 暴露端口到节点&#xff0c;提供了集群外部访问的入口LoadBalancer 需要负载均衡器&#xff08;通常都需要云服务商提供&#xff0c;裸机可以安装 METALLB 测试&#xff09;Ingress 统一管理 svc的外部访问&am…

Kruskal(克鲁斯卡尔)算法总结

知识概览 克鲁斯卡尔算法适用于稀疏图求最小生成树&#xff0c;时间复杂度为O(mlogm)。 例题展示 题目链接 Kruskal算法求最小生成树 859. Kruskal算法求最小生成树 - AcWing题库https://www.acwing.com/problem/content/861/ 代码 #include <iostream> #include &l…

【Git-IDEA】在 IDEA 中使用 Git(clone、pull、push、merge、建立本地分支与远程分支的连接)

【Git-IDEA】在 IDEA 中使用 Git&#xff08;clone、pull、push、merge、建立本地分支与远程分支的连接&#xff09; 1&#xff09;Gitee2&#xff09;配置 Git3&#xff09;初始化本地仓库4&#xff09;连接远程仓库5&#xff09;clone5.1.方式一5.2.方式二 6&#xff09;分支…

el-date-picker周选择器获取选择的日期范围

<el-date-pickerv-model"formData.date"type"week"format"yyyy 第 WW 周"placeholder"选择周"change"weekChange"> </el-date-picker>// 方法一&#xff1a;weekChange(val) {let startTime new Date(val.getT…

向华为学习:IPD运作-PDP产品开发流程-验证和发布阶段的关键活动

前几天华研荟为您分享了IPD体系中产品开发流程&#xff08;PDP流程&#xff0c;很多时候也直接称为IPD流程&#xff09;前三个阶段&#xff1a;概念、计划和开发阶段的主要内容和关键活动。 今天我们继续来介绍PDP流程的后面两个&#xff1a;验证、发布阶段的主要内容和关键活动…

处理及调度与死锁

处理及调度与死锁 一、前言 前面介绍了进程与线程的相关概念&#xff0c;现在继续学习处理机调度&#xff0c;处理机是系统最重要的资源&#xff0c;提高处理机的利用率和改善系统性能&#xff0c;在很大程度上取决于处理机调度性能的好坏&#xff0c;下面来介绍处理的调度以…

大一C语言查缺补漏 12.24

遗留问题&#xff1a; 6-1 1 在C语言中&#xff0c;如果要保留小数的话&#xff0c;一定要除以2.0&#xff0c;而不是2。 设整型变量m,n,a,b的值均为1&#xff0c;执行表达式&#xff08;m a>b&#xff09;||(n a<b)后&#xff0c;表达式的值以及变量m和n的值是&#…

iPhone恢复出厂设置照片还在吗?分享3个恢复方法!

随着使用时间的增长&#xff0c;手机可能会出现卡顿、运行缓慢等情况。此时&#xff0c;将手机恢复出厂设置可以清除缓存和一些不必要的文件&#xff0c;从而提高设备的运行速度。 但是&#xff0c;每当涉及恢复出厂设置的问题时&#xff0c;许多小伙伴都会关心一个问题&#…

Centos7:Jenkins+gitlab+node项目启动(1)

安装Jenkins 虚拟机配置 需要的软件 https://download.csdn.net/download/myy2012/88668255 解压到目录 用xftp 上传 开始安装jdk rmp -ivh jdk-8u181-linux-x64.rpm 开始安装jenkins rmp -ivh jenkins-2.99-1.1.noarch.rpm 修改用户与端口(端口按需修改) vim /etc/sy…