最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

用Python制作一個(gè)文件加密器

 更新時(shí)間:2022年02月18日 08:38:46   作者:漫路在線  
大家好,本篇文章主要講的是用Python制作一個(gè)文件加密器,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下

前言

因?yàn)橐恍┒枚级脑?,我的父母?duì)于我電腦上的文件內(nèi)容特別感興趣。為了防止信息泄露,我連夜用Python做了一個(gè)文件加密器,防止我的重要信息被泄露。

在這里插入圖片描述

下載地址

github:https://github.com/13337356453/FileCipher

GitHub上的資源是Python源代碼

效果預(yù)覽

為了方便操作,我用PyQt做了窗口。運(yùn)行起來是這樣的。

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

加密效果還是很不錯(cuò)了

加密算法

對(duì)于我來說,程序中g(shù)ui的編寫算比較簡(jiǎn)單。困難的是加密算法的編寫。

先把密碼的代碼貼出來,在詳細(xì)講解。

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)  # 獲取數(shù)據(jù)長(zhǎng)度
        a = [ord(x) for x in data]
        # 判斷是否為4的倍數(shù)
        remainder = length % 4  # 余數(shù)
        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對(duì)應(yīng)e , f2對(duì)應(yīng)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)  # 數(shù)據(jù)長(zhǎng)度
        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])
        # 數(shù)據(jù)拼接
        q=m+o
        for r in q:
            result+=chr(r)
        # 返回結(jié)果
        return result

大概的處理過程是這樣的

在這里插入圖片描述

隨便畫的,大概就是這個(gè)流程,有什么錯(cuò)誤也懶得管了

先將密鑰進(jìn)行處理,把密鑰轉(zhuǎn)化為ASCII,并且把所有數(shù)字相加得到和,通過乘除法將密鑰的范圍控制在10-100之間。
再處理數(shù)據(jù),講數(shù)據(jù)分為4組,不足位數(shù)用00補(bǔ)齊。分組之后再進(jìn)行交叉分組。得到第二次分組的結(jié)果。對(duì)結(jié)果一利用密鑰進(jìn)行處理,得到數(shù)據(jù)一。再將結(jié)果一之和進(jìn)行密鑰處理,得到密鑰二。
再對(duì)結(jié)果二利用密鑰二進(jìn)行處理,得到數(shù)據(jù)二。
拼接數(shù)據(jù)一和二,得到加密數(shù)據(jù)。

解密就是逆向操作了。

總結(jié)

到此這篇關(guān)于用Python制作一個(gè)文件加密器的文章就介紹到這了,更多相關(guān)Python文件加密內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中五種實(shí)現(xiàn)字符串反轉(zhuǎn)的方法

    Python中五種實(shí)現(xiàn)字符串反轉(zhuǎn)的方法

    這篇文章主要介紹了Python中五種實(shí)現(xiàn)字符串反轉(zhuǎn)的方法,編寫一個(gè)函數(shù),其作用是將輸入的字符串反轉(zhuǎn)過來。下面文章關(guān)于其詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-05-05
  • Numpy與Pytorch 矩陣操作方式

    Numpy與Pytorch 矩陣操作方式

    今天小編就為大家分享一篇Numpy與Pytorch 矩陣操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python中使用字典對(duì)列表中的元素進(jìn)行計(jì)數(shù)的幾種方式

    Python中使用字典對(duì)列表中的元素進(jìn)行計(jì)數(shù)的幾種方式

    本文主要介紹了Python中使用字典對(duì)列表中的元素進(jìn)行計(jì)數(shù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • Django中Aggregation聚合的基本使用方法

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

    這篇文章主要給大家介紹了關(guān)于Django中Aggregation聚合的基本使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Python使用urllib2獲取網(wǎng)絡(luò)資源實(shí)例講解

    Python使用urllib2獲取網(wǎng)絡(luò)資源實(shí)例講解

    urllib2是Python的一個(gè)獲取URLs(Uniform Resource Locators)的組件。他以u(píng)rlopen函數(shù)的形式提供了一個(gè)非常簡(jiǎn)單的接口,下面我們用實(shí)例講解他的使用方法
    2013-12-12
  • 詳解Python自動(dòng)化之文件自動(dòng)化處理

    詳解Python自動(dòng)化之文件自動(dòng)化處理

    今天給大家?guī)淼氖顷P(guān)于Python的相關(guān)知識(shí),文章圍繞著Python文件自動(dòng)化處理展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • pytorch常用函數(shù)之torch.randn()解讀

    pytorch常用函數(shù)之torch.randn()解讀

    這篇文章主要介紹了pytorch常用函數(shù)之torch.randn()解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 詳解Python 字符串相似性的幾種度量方法

    詳解Python 字符串相似性的幾種度量方法

    這篇文章主要介紹了詳解Python 字符串相似性的幾種度量方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 怎樣保存模型權(quán)重和checkpoint

    怎樣保存模型權(quán)重和checkpoint

    這篇文章主要介紹了如何保存模型權(quán)重和checkpoint,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python 自動(dòng)登錄淘寶并保存登錄信息的方法

    Python 自動(dòng)登錄淘寶并保存登錄信息的方法

    這篇文章主要介紹了Python 自動(dòng)登錄淘寶并保存登錄信息的方法,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09

最新評(píng)論

兴和县| 辽阳市| 新晃| 贵港市| 托里县| 平遥县| 湖口县| 娱乐| 新巴尔虎左旗| 金湖县| 仙游县| 义马市| 醴陵市| 威海市| 南宫市| 石林| 东方市| 扬州市| 两当县| 杂多县| 项城市| 鹤岗市| 通化县| 怀化市| 鹰潭市| 习水县| 洛阳市| 建平县| 石首市| 纳雍县| 昔阳县| 福清市| 安仁县| 友谊县| 德安县| 会东县| 舒城县| 新兴县| 晋城| 镇原县| 寻乌县|