用Python制作一个文件加密器

 更新时间:2022年02月18日 08:38:46   作者:漫路在线  
大家好,本篇文章主要讲的是用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文件加密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中五种实现字符串反转的方法

    Python中五种实现字符串反转的方法

    这篇文章主要介绍了Python中五种实现字符串反转的方法,编写一个函数,其作用是将输入的字符串反转过来。下面文章关于其详细介绍,需要的小伙伴可以参考一下
    2022-05-05
  • Numpy与Pytorch 矩阵操作方式

    Numpy与Pytorch 矩阵操作方式

    今天小编就为大家分享一篇Numpy与Pytorch 矩阵操作方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python中使用字典对列表中的元素进行计数的几种方式

    Python中使用字典对列表中的元素进行计数的几种方式

    本文主要介绍了Python中使用字典对列表中的元素进行计数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • Django中Aggregation聚合的基本使用方法

    Django中Aggregation聚合的基本使用方法

    这篇文章主要给大家介绍了关于Django中Aggregation聚合的基本使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者使用Django具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-07-07
  • Python使用urllib2获取网络资源实例讲解

    Python使用urllib2获取网络资源实例讲解

    urllib2是Python的一个获取URLs(Uniform Resource Locators)的组件。他以urlopen函数的形式提供了一个非常简单的接口,下面我们用实例讲解他的使用方法
    2013-12-12
  • 详解Python自动化之文件自动化处理

    详解Python自动化之文件自动化处理

    今天给大家带来的是关于Python的相关知识,文章围绕着Python文件自动化处理展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • pytorch常用函数之torch.randn()解读

    pytorch常用函数之torch.randn()解读

    这篇文章主要介绍了pytorch常用函数之torch.randn()解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 详解Python 字符串相似性的几种度量方法

    详解Python 字符串相似性的几种度量方法

    这篇文章主要介绍了详解Python 字符串相似性的几种度量方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 怎样保存模型权重和checkpoint

    怎样保存模型权重和checkpoint

    这篇文章主要介绍了如何保存模型权重和checkpoint,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Python 自动登录淘宝并保存登录信息的方法

    Python 自动登录淘宝并保存登录信息的方法

    这篇文章主要介绍了Python 自动登录淘宝并保存登录信息的方法,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09

最新评论