时间:2022-11-19 10:51:43 | 栏目: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补齐。分组之后再进行交叉分组。得到第二次分组的结果。对结果一利用密钥进行处理,得到数据一。再将结果一之和进行密钥处理,得到密钥二。
再对结果二利用密钥二进行处理,得到数据二。
拼接数据一和二,得到加密数据。
解密就是逆向操作了。