用Python制作一个文件加密器
作者:漫路在线 发布时间:2023-01-16 02:41:05
标签:python,文件,加密
前言
因为一些懂得都懂的原因,我的父母对于我电脑上的文件内容特别感兴趣。为了防止信息泄露,我连夜用Python做了一个文件加密器,防止我的重要信息被泄露。
下载地址
github:https://github.com/13337356453/FileCipher
GitHub上的资源是Python源代码
效果预览
为了方便操作,我用PyQt做了窗口。运行起来是这样的。
加密效果还是很不错了
加密算法
对于我来说,程序中gui的编写算比较简单。困难的是加密算法的编写。
先把密码的代码贴出来,在详细讲解。
class Cipher:
key = ""
def __init__(self, key):
self.key = key
def setKey(self, key):
self.key = key
def getKey(self):
return self.key
def parseKey(self, key):
# 处理密钥
if key != "":
o = 0
for k in key:
n = 0
i = str(ord(k))
for t in i:
n += int(t)
o += n
# 使密钥范围控制在10-100之间
while True:
if o < 10:
o = int(o * 2)
elif o > 100:
o = int(o / 2)
else:
return o
return
def getOdd(self, max):
return [i for i in range(1, max + 1) if i % 2 == 1]
def encrypt(self, data):
# 加密算法
if data == "":
return
result = ""
length = len(data) # 获取数据长度
a = [ord(x) for x in data]
# 判断是否为4的倍数
remainder = length % 4 # 余数
if remainder != 0:
b = 4 - remainder
for c in range(b):
a.append(0)
# 第一次分组
groups = []
d = len(a) // 2
e1 = a[:d]
e2 = a[d:]
indexs = self.getOdd(d)
groups.append([e1[i - 1] for i in indexs])
groups.append([e1[i] for i in indexs])
groups.append([e2[i - 1] for i in indexs])
groups.append([e2[i] for i in indexs])
# 第二次分组
f1 = groups[0] + groups[3]
f2 = groups[1] + groups[2]
# 第一次加密
keycode1 = self.parseKey(self.getKey())
g = []
for h in f1:
i = h + keycode1
j = chr(i)
g.append(i)
result += j
# 第二次获取keycode
k = str(sum(g))
keycode2 = self.parseKey(k)
# 第二次加密
for l in f2:
m = l + keycode2
n = chr(m)
result += n
# 加密完成
return result
def decrypt(self, data):
# 解密算法
if data == "":
return
result = ""
# 获取keycode1
keycode1 = self.parseKey(self.getKey())
# 第一次解密
a = len(data) // 2
b1 = data[:a]
b2 = data[a:]
c = [ord(d) for d in b1]
e = [f - keycode1 for f in c]
# 获取keycode2
g = str(sum(c))
keycode2 = self.parseKey(g)
# 第二次解密
h = [ord(i) for i in b2]
j = [k - keycode2 for k in h]
# f1对应e , f2对应j
# 第一次分组
k = len(e) // 2
group1 = e[:k]
group4 = e[k:]
group2 = j[:k]
group3 = j[k:]
# 第二次分组
datalength = len(group1) + len(group2) + len(group3) + len(group4) # 数据长度
l = datalength // 4
m = []
for n in range(l):
m.append(group1[n])
m.append(group2[n])
o=[]
for p in range(l):
o.append(group3[p])
o.append(group4[p])
# 数据拼接
q=m+o
for r in q:
result+=chr(r)
# 返回结果
return result
大概的处理过程是这样的
随便画的,大概就是这个流程,有什么错误也懒得管了
先将密钥进行处理,把密钥转化为ASCII,并且把所有数字相加得到和,通过乘除法将密钥的范围控制在10-100之间。
再处理数据,讲数据分为4组,不足位数用00补齐。分组之后再进行交叉分组。得到第二次分组的结果。对结果一利用密钥进行处理,得到数据一。再将结果一之和进行密钥处理,得到密钥二。
再对结果二利用密钥二进行处理,得到数据二。
拼接数据一和二,得到加密数据。
解密就是逆向操作了。
来源:https://blog.csdn.net/realmels/article/details/122964547
0
投稿
猜你喜欢
- 前言在实际开发中, 有不少的场景需要使用到模糊查询, MongoDB shell 模糊查询很简单:db.collection.find({&
- 最后罗嗦一句,本人录入这篇文章用的机器上没有 ASP 环境,所以提供的代码未能进行测试,对这一点本人深表歉意。如果大家发现了代码中的任何问题
- 一、背景最近有个需求是从一个后台的留言网站爬取留言数据,后台管理网站必然涉及到了登录,登录就有个验证码的问题必须得解决,由于验证码是从后端生
- 本文主要涉及图形验证码的相关功能,主要包括,图形验证码获取、验证码文字存储、验证码生成等。图形验证码接口设计和定义 验证码获取接口
- 序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据方
- 很多人都使用很多的编程工具,尤其对于Web开发人员。这个小教程将告诉各位如何使DreamweaverMX编程环境适合中国的Web开发人员。一
- 情境问题小王是一名法务专员,工作中会处理所在公司的侵权事件并向侵权方发送法务函。他会按照【法务函模板.docx】 Word 文件给【封号名单
- 数据库中提取长长的文章,总是有碍网页的排版布局。所以,想固定地提取一部分字符,然后后面有……替代。相关推荐:当标题不能显示完整的时候 1、原
- 8是典型的七段数码管的例子,因为刚好七段都有经过,这里我写的代码是从1开始右转。这是看Mooc视频写的一个关于用七段数码管显示当前时间# -
- 前言每条if语句的核心都是一个值为True或False的表达式,这种表达式被称为条件测试。Python根据条件测试的值为True还是Fals
- 1、如何统计序列中元素的出现频度实际案例:(1)某随机序列[12, 5, 6, 4, 6, 5, 5, 7, ...] 中找到出现次数最高的
- 安装wxpypip install -U wxpy登录微信# 导入模块from wxpy import *# 初始化机器人,扫码登陆bot
- 前段时间在网上找了一个“完美的”JavaScript对象克隆的函数,感觉还不错,但随后便出现了一些问题,发现这个克隆并不好用,在使用发现了如
- 一对多(ForeignKey)class ForeignKey(ForeignObject): def __init__(sel
- 一、根据条件在序列中筛选数据假设有一个数字列表 data, 过滤列表中的负数data = [1, 2, 3, 4, -5]# 使用列表推导式
- 简介表单的操作是Web程序开发中最核心的模块之一,绝大多数的动态交互功能都是通过表单的形式实现的。本文会教大家实现简单的表单操作。普通表单提
- 我简单的绘制了一下排序算法的分类,蓝色字体的排序算法是我们用python3实现的,也是比较常用的排序算法。Python3常用排序算法1、Py
- Python实现八大排序算法,具体内容如下1、插入排序描述插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个
- 安装正常情况,只需pip install PIL==1.1.7或者pip install Pillow==2.9.0即可。但需留意安装后的输
- 第一次使用csdn写一个文章,如果有什么写的不对的地方,欢迎在下面评论指正,谢谢各位。1.明确要使用的包首先就是opencv的函数库,还有p