本篇博客是python开发的使用案例博客,结合一些具体的案例进行阐述,本篇博客介绍如何开发一个专属的加密解密windows小应用。
其他相关的博客文章如下:
基于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图标,这样看起来比较高大上
改进后:pyinstaller -F --icon=subway.ico hello.py
详细的步骤参考博客:
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
制作成exe文件后,双击运行,后台会显示一些日志,在弹出的文件资源选择框中选择要加密的文件;
选中要加密的文件后,程序会自动进行加密,加密后的文件会放在同一目录中;
加密后的文件发送给接收方即可
接收方运行exe文件,然后选择要解密的文件,后缀为PET,选择后程序会进行解密,解密后的文件与被解密的文件在同一目录下。
解密成功
基于python开发小工具,加密解密的exe文件。