前言
因为一些懂得都懂的原因,我的父母对于我电脑上的文件内容特别感兴趣。为了防止信息泄露,我连夜用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补齐。分组之后再进行交叉分组。得到第二次分组的结果。对结果一利用密钥进行处理,得到数据一。再将结果一之和进行密钥处理,得到密钥二。
再对结果二利用密钥二进行处理,得到数据二。
拼接数据一和二,得到加密数据。
解密就是逆向操作了。
总结
到此这篇关于用Python制作一个文件加密器的文章就介绍到这了,更多相关Python文件加密内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!