用Python制作一個(gè)文件加密器
前言
因?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虛擬機(jī)中魔術(shù)方法的使用
這篇文章主要給大家介紹在?cpython?當(dāng)中一些比較花里胡哨的魔術(shù)方法,以幫助我們自己實(shí)現(xiàn)比較花哨的功能,當(dāng)然這其中也包含一些也非常實(shí)用的魔術(shù)方法,需要的可以參考下2023-05-05python中import cv2遇到的錯(cuò)誤及安裝方式
這篇文章主要介紹了python中import cv2遇到的錯(cuò)誤及安裝方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09python中for循環(huán)輸出列表索引與對(duì)應(yīng)的值方法
今天小編就為大家分享一篇python中for循環(huán)輸出列表索引與對(duì)應(yīng)的值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-11-11Python實(shí)現(xiàn)端口檢測(cè)的方法
這篇文章主要介紹了Python實(shí)現(xiàn)端口檢測(cè)的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07Python迅速掌握語音識(shí)別之知識(shí)儲(chǔ)備篇
語音識(shí)別是一門交叉學(xué)科。近二十年來,語音識(shí)別技術(shù)取得顯著進(jìn)步,開始從實(shí)驗(yàn)室走向市場(chǎng)。人們預(yù)計(jì),未來10年內(nèi),語音識(shí)別技術(shù)將進(jìn)入工業(yè)、家電、通信、汽車電子、醫(yī)療、家庭服務(wù)、消費(fèi)電子產(chǎn)品等各個(gè)領(lǐng)域2021-11-11Python將8位的圖片轉(zhuǎn)為24位的圖片實(shí)現(xiàn)方法
這篇文章主要介紹了Python將8位的圖片轉(zhuǎn)為24位的圖片的實(shí)現(xiàn)代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-10-10