使用python做一个加密资料的软件,可加密应用程序、文件、压缩包等多种文件格式,不可直接加密文件夹,可以先用压缩包打包在加密。加密后的文件后缀不可乱改,否则解密会失败。程序内没有加入加密和解密成功的提示信息。

加密使用的是双层MD5加密

点个赞留个关注吧!!

首先导入库

import os
import hashlib

读取文件与写入文件

a = open(name_1, "rb")  #读取文件
b = open(data, "wb")    #写入文件
a.close()    #保存退出
b.close()    #保存退出

使用ord进行编码,用bytes进行解码,内置索引进行循环读取密码,挨个读取进行编码写入,

#加密及解密
def Encryption_and_decryption():count = 0  #索引for now in a:for nowByte in now:newByte = nowByte ^ ord(password_data[count % len(password_data)])  #循环遍历出密码的ord值,单个循环count += 1b.write(bytes([newByte]))   #转换
Encryption_and_decryption()

用ord进行编码可以看到会出现一点问题,就是加密后的文件,如文本文件,如果加密的密码是‘qwer’,编码则会将q w e r分别用bytes编码为 113 119 101 114,然后把编码后的数字在循环内一个一个插入到文本内,进行代替,解密也是同样原理,但是有一个致命缺陷,就是假如你的密码是”qwer“,解码的时候输入一个密码 q 即可全部解码成功,这个是一个缺陷。

所以我使用MD5进行加密,然后再进行编码,MD5大家都知道,不同的MD5值是由不同的字母、数字、字符串组合进行转换而成,MD5也区分大小写,这也让我们的加密软件更安全一步

hl = hashlib.md5()
hl.update(password.encode(encoding='utf-8'))
password_list = hl.hexdigest()

为了我们的资料,我将MD5进行了二次加密,用已经加密后的MD5值再次进行加密,然后将第一个MD5值和第二个MD5值进行组合(非相加),组成高强度的加密

#使用MD5进行加密(双层加密)
hl = hashlib.md5()
hl.update(password.encode(encoding='utf-8'))
password_list = hl.hexdigest()hl.update(password_list.encode(encoding='utf-8'))
password_list2 = hl.hexdigest()
password_data = password_list+password_list2

解码也是同样原理,将密码进行MD5加密再加密,然后进入文件进行编码转换,如果密码正确则文件不会有乱码,如果密码错误则文件内都是乱码,这个程序是没有解码和加密成功的提示。

由于路径多种多样,程序会因此运行错误,所以我用replace进行路径’\ /‘转换,把所有的’\\‘和’\‘转换为’/‘,用于程序方便读取

name_1 = name_1.replace("\\", "/")  # 替换
data = data.replace("\\", "/")  # 替换

为了方便大家进行使用,提取进行程序的检测,检测是否存在该文件,或路径的错误

if os.path.exists(name_1) == True:pass
else:print('请检查是否路径错误或不存在该文件!!!!')os.system('pause')exit()

保存的路径不可缺少,如果保存的路径没有输入直接跳过则会默认为读取程序的位置,如果读取程序的路径也没有写入,则会以读取程序的根目录为存储地进行保存

if name_1.split(".")[1][-4:] == 'DATA':F = name_1.split(".")[1].replace("DATA", "")if os.path.split(data)[0] == '':if os.path.split(name_1)[0] == '':data = os.path.split(name_1)[-1].split(".")[0] + '.' + Felse:data = os.path.split(name_1)[0] + '/' + os.path.split(name_1)[-1].split(".")[0] + '.' + Felse:data = data + '/' + os.path.split(name_1)[-1].split(".")[0] + '.' + F
else:# 保存路径if os.path.split(data)[0] == '':if os.path.split(name_1)[0] == '':data = name_1.split(".")[1]  # 后缀data = os.path.split(name_1)[-1].split(".")[0] + '.' + data + 'DATA'else:data = name_1.split(".")[1]  # 后缀data = os.path.split(name_1)[0] + '/' + os.path.split(name_1)[-1].split(".")[0] + '.' + data + 'DATA'else:name_3 = name_1.split(".")[1]  # 后缀data = data + '/' + os.path.split(name_1)[-1].split(".")[0] + '.' + name_3 + 'DATA'

这个程序加密后会在程序后缀出现DATA,这个是为了方便清楚的知道什么是已加密程序,而且还可以让软件程序检测是否是已经加密过的程序,方便解密。

完整代码:

import os
import hashlibprint("-------------------------------------软件加密工具-------------------------------------")
print("关注博主不迷路!!!\nhttps://jiangongfang.blog.csdn.net/\nhttps://blog.51cto.com/u_15449377")
print("使用告知:\n【加密后的文件后缀会多出DATA,是为了方便软件检测,请勿乱改加密后的后缀名】")
print("【保存文件默认路径 为加密文件或解密文件的当前目录,不是软件的当前目录】")
print("【要加密或解密的文件命名不可有“./\”字符,否则会出错】")
print("-------------------------------------软件加密工具-------------------------------------\n")
name_1 = input('输入要加密或解密的文件名含后缀:')
#判断是否存在该文件
if os.path.exists(name_1) == True:pass
else:print('请检查是否路径错误或不存在该文件!!!!')os.system('pause')exit()password = input('请输入要加密或解密的密码:')
data = input('输入要保存文件的路径位置(可不填):')name_1 = name_1.replace("\\", "/")  # 替换
data = data.replace("\\", "/")  # 替换if name_1.split(".")[1][-4:] == 'DATA':F = name_1.split(".")[1].replace("DATA", "")if os.path.split(data)[0] == '':if os.path.split(name_1)[0] == '':data = os.path.split(name_1)[-1].split(".")[0] + '.' + Felse:data = os.path.split(name_1)[0] + '/' + os.path.split(name_1)[-1].split(".")[0] + '.' + Felse:data = data + '/' + os.path.split(name_1)[-1].split(".")[0] + '.' + F
else:# 保存路径if os.path.split(data)[0] == '':if os.path.split(name_1)[0] == '':data = name_1.split(".")[1]  # 后缀data = os.path.split(name_1)[-1].split(".")[0] + '.' + data + 'DATA'else:data = name_1.split(".")[1]  # 后缀data = os.path.split(name_1)[0] + '/' + os.path.split(name_1)[-1].split(".")[0] + '.' + data + 'DATA'else:name_3 = name_1.split(".")[1]  # 后缀data = data + '/' + os.path.split(name_1)[-1].split(".")[0] + '.' + name_3 + 'DATA'a = open(name_1, "rb")  #读取文件
b = open(data, "wb")    #写入文件#使用MD5进行加密(双层加密)
hl = hashlib.md5()
hl.update(password.encode(encoding='utf-8'))
password_list = hl.hexdigest()hl.update(password_list.encode(encoding='utf-8'))
password_list2 = hl.hexdigest()
password_data = password_list+password_list2#加密及解密
def Encryption_and_decryption():count = 0  #索引for now in a:for nowByte in now:newByte = nowByte ^ ord(password_data[count % len(password_data)])  #循环遍历出密码的ord值,单个循环count += 1b.write(bytes([newByte]))   #转换
Encryption_and_decryption()
a.close()
b.close()os.system('pause')

可以看到已经加密的程序后缀有DATA,解密后会恢复原来的后缀名

【软件加密】python制作一个超强的加密软件相关推荐

  1. Python制作一个简单的抽奖软件(二)

    Python制作一个简单的抽奖软件(二) 认识QT 因为都对 QT和tkinter都没用过,之前简单使用tkinter后发现,界面调整不太好弄.然后度娘了之后,QT是强大GUI库之一,很多人都推荐它. ...

  2. python编写一个软件-使用python制作一个解压缩软件

    python实现解压缩的重要模块就是――zipfile,其次是os 安装zipfile模块 首先得安装zipfile模块,打开cmd输入一下命令即可安装 pip install zipfile os是 ...

  3. python做一个【批量加密解密】软件,让你的文件有程序加密保护,在也不怕别人乱翻你的东西了

    今天这个批量加解密很简单,和上一个[软件加密]python制作一个超强的加密软件_₰₯₮ 的博客-CSDN博客 文章结合了一下,然后优化了一下 循环文件夹的所有文件,然后捉个进行加解密 def ite ...

  4. python软件桌面图标_python制作一个桌面便签软件

    # 2014.10.15 更新了memo.zip, 网盘的exe:修复:1.隔日启动不能正常加载json,加入:1.隐藏任务栏图标,2.通过垃圾桶进行窗口移动. # 2014.10.8 10.36更新 ...

  5. python制作解压工具_使用python制作一个解压缩软件

    python实现解压缩的重要模块就是--zipfile,其次是os 安装zipfile模块 首先得安装zipfile模块,打开cmd输入一下命令即可安装 pip install zipfile os是 ...

  6. python如何制作一个工程软件_使用python制作一个解压缩软件

    python实现解压缩的重要模块就是--zipfile,其次是os 安装zipfile模块 首先得安装zipfile模块,打开cmd输入一下命令即可安装 pip install zipfile os是 ...

  7. python如何制作一个工程软件_如何利用python制作一个解压缩软件-Go语言中文社区...

    如何利用python制作一个解压缩软件 python实现解压缩的重要模块就是--zipfile,其次是os 安装zipfile模块 首先得安装zipfile模块,打开cmd输入一下命令即可安装 pip ...

  8. 20220517 Python 制作一个儿童学习软件 (附源码和软件下载) 包含语音合成 视频播放 pyqt pptsx3 Qmovie request pygame 音频播放

    20220517 Python 制作一个儿童学习软件 (附源码和软件下载) 包含语音合成 视频播放 pyqt pptsx3 Qmovie request pygame 音频播放 文章目录 202205 ...

  9. 如何利用python制作一个解压缩软件

    文章目录 如何利用python制作一个解压缩软件 安装zipfile模块 编写核心代码 安装tkinter模块 整合代码 安装pyinstaller模块 打包程序为可执行文件 打包程序为可执行文件 如 ...

  10. python打字_使用Python制作一个打字训练小工具

    一.写在前面 说道程序员,你会想到什么呢?有人认为程序员象征着高薪,有人认为程序员都是死肥宅,还有人想到的则是996和 ICU. 别人眼中的程序员:飞快的敲击键盘.酷炫的切换屏幕.各种看不懂的字符代码 ...

最新文章

  1. html,xml_网页开发_爬虫_笔记
  2. linux php mysql安装完整版本_Linux下安装PHP+MySQL+Apache完整版
  3. 为Android运行新的英特尔模拟器
  4. python之强大的日志模块
  5. 前端学习路线_前端学习路线图
  6. 删除表中所有记录只留下第一条,按照rownum排他,使用rowid删除
  7. python怎么把程序封装成函数_PYTHON中如何把固定格式代码,封装成一个函数?
  8. java工程师面试如何自我介绍
  9. 基于阿里云日志服务快速打造简版业务监控看板
  10. asp提交数据500服务器错误信息,windows2003运行ASP发送HTTP 500 - 内部服务器错误怎么处理啊?...
  11. Eclipse开发程序,取得新的工程后,启动Web服务出错原因总结
  12. 牛客网 F-The Biggest Water Problem
  13. oracle 应收 系统选项,Oracle财务系统应收账款模块操作手册
  14. 运算放大器之开环增益
  15. 互联网裁员为什么专捡大于35的裁?
  16. 迅雷离线下载脚本 — LinuxTOY
  17. 面试准备—任重而道远
  18. 微信id修改服务器繁忙,微信终于可以修改ID了! 但,你可能不行......
  19. 计算机的扩展模式,Win7双屏复制/双屏扩展设置教程
  20. 用STM32F103完成对SD卡的数据读取

热门文章

  1. 如何复制百度文库中的内容
  2. 概率扩散模型 Probabilistic Diffusion Model
  3. 【操作系统】为什么需要内核
  4. 【简单】基于springboot的学生在线考试系统【老师、学生、管理员】
  5. 项目四管理计算机中的资源,第十七章-计算机在项目管理中的应用PPT课件.ppt
  6. mysql可视化工具选型
  7. 力软的前端_力软快速开发平台,一套完整的管理系统解决方案
  8. [bigdata-093] drool 规则引擎安装和试用(不全)
  9. Android使用okhttp加载图片
  10. oracle扩字段长度有什么影响,修改字段长度应用会影响到生产性能