因为一些懂得都懂的原因,我的父母对于我电脑上的文件内容特别感兴趣。为了防止信息泄露,我连夜用Python做了一个文件加密器,防止我的重要信息被泄露。
csdn:https://download.csdn.net/download/realmels/80967547
github:https://github.com/13337356453/FileCipher
GitHub上的资源是Python源代码,CSDN上有源代码和封装的exe
为了方便操作,我用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补齐。分组之后再进行交叉分组。得到第二次分组的结果。对结果一利用密钥进行处理,得到数据一。再将结果一之和进行密钥处理,得到密钥二。
再对结果二利用密钥二进行处理,得到数据二。
拼接数据一和二,得到加密数据。
解密就是逆向操作了。
很简单的小项目,建议下载源代码查看。
目前只能加密文本数据,视频和图片数据的加密方法博主还不会。