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补齐。分组之后再进行交叉分组。得到第二次分组的结果。对结果一利用密钥进行处理,得到数据一。再将结果一之和进行密钥处理,得到密钥二。
再对结果二利用密钥二进行处理,得到数据二。
拼接数据一和二,得到加密数据。

解密就是逆向操作了。

 

总结

关于用Python制作一个文件加密器的文章就介绍至此,更多相关Python文件加密内容请搜索编程宝库以前的文章,希望以后支持编程宝库

1.input输入函数input函数:获取用户输入,保存成一个字符串。>>> name = input("请输入你的名字:")请输入你的名字:>? onceday>>> ...