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

下載地址
github:https://github.com/13337356453/FileCipher
GitHub上的資源是Python源代碼
效果預(yù)覽
為了方便操作,我用PyQt做了窗口。運(yùn)行起來是這樣的。



加密效果還是很不錯(cuò)了
加密算法
對于我來說,程序中g(shù)ui的編寫算比較簡單。困難的是加密算法的編寫。
先把密碼的代碼貼出來,在詳細(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ù)長度
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對應(yīng)e , f2對應(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ù)長度
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é)果。對結(jié)果一利用密鑰進(jìn)行處理,得到數(shù)據(jù)一。再將結(jié)果一之和進(jìn)行密鑰處理,得到密鑰二。
再對結(jié)果二利用密鑰二進(jìn)行處理,得到數(shù)據(jù)二。
拼接數(shù)據(jù)一和二,得到加密數(shù)據(jù)。
解密就是逆向操作了。
總結(jié)
到此這篇關(guān)于用Python制作一個(gè)文件加密器的文章就介紹到這了,更多相關(guān)Python文件加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入理解Python虛擬機(jī)中魔術(shù)方法的使用
這篇文章主要給大家介紹在?cpython?當(dāng)中一些比較花里胡哨的魔術(shù)方法,以幫助我們自己實(shí)現(xiàn)比較花哨的功能,當(dāng)然這其中也包含一些也非常實(shí)用的魔術(shù)方法,需要的可以參考下2023-05-05
python中import cv2遇到的錯(cuò)誤及安裝方式
這篇文章主要介紹了python中import cv2遇到的錯(cuò)誤及安裝方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
python中for循環(huán)輸出列表索引與對應(yīng)的值方法
今天小編就為大家分享一篇python中for循環(huán)輸出列表索引與對應(yīng)的值方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11
Python將8位的圖片轉(zhuǎn)為24位的圖片實(shí)現(xiàn)方法
這篇文章主要介紹了Python將8位的圖片轉(zhuǎn)為24位的圖片的實(shí)現(xiàn)代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-10-10

