首頁 > 軟體

用Python製作一個檔案加密器

2022-02-18 10:03:31

前言

因為一些懂得都懂的原因,我的父母對於我電腦上的檔案內容特別感興趣。為了防止資訊洩露,我連夜用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檔案加密內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com