用Python制作一个文件加密器(支持中文) 您所在的位置:网站首页 怎样把一个文件夹加密 用Python制作一个文件加密器(支持中文)

用Python制作一个文件加密器(支持中文)

2024-04-04 12:51| 来源: 网络整理| 查看: 265

文章目录 1.1 前言1.2 下载地址1.3 效果预览2.1 加密算法总结

1.1 前言

因为一些懂得都懂的原因,我的父母对于我电脑上的文件内容特别感兴趣。为了防止信息泄露,我连夜用Python做了一个文件加密器,防止我的重要信息被泄露。 在这里插入图片描述

1.2 下载地址

csdn:https://download.csdn.net/download/realmels/80967547 github:https://github.com/13337356453/FileCipher

GitHub上的资源是Python源代码,CSDN上有源代码和封装的exe

1.3 效果预览

为了方便操作,我用PyQt做了窗口。运行起来是这样的。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 加密效果还是很不错了

2.1 加密算法

对于我来说,程序中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 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: if not r==0: result+=chr(r) # 返回结果 return result

大概的处理过程是这样的 在这里插入图片描述 随便画的,大概就是这个流程,有什么错误也懒得管了

先将密钥进行处理,把密钥转化为ASCII,并且把所有数字相加得到和,通过乘除法将密钥的范围控制在10-100之间。 再处理数据,讲数据分为4组,不足位数用00补齐。分组之后再进行交叉分组。得到第二次分组的结果。对结果一利用密钥进行处理,得到数据一。再将结果一之和进行密钥处理,得到密钥二。 再对结果二利用密钥二进行处理,得到数据二。 拼接数据一和二,得到加密数据。

解密就是逆向操作了。

总结

很简单的小项目,建议下载源代码查看。

目前只能加密文本数据,视频和图片数据的加密方法博主还不会。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有