系列文章:
目前連結著課本6-2-2 第二節 加密。該章節介紹兩種加密方法,分別是凱薩密碼與維吉尼亞密碼。
為了讓學生實作加密解密的過程,就使用壓縮檔ZIP來進行加密與解密。主要的理由,加密的長度可以控制在數字四碼內,用暴力破解法可以在短時間內得到結果。若數字加入英文字母大小寫來進行加密的話,整個時間會拉長到一個小時以上。對於課程進度,就會顯得難以掌握。
目前使用的程式碼則是來自資料來源1。學生測試的結果發現四個數字中,0000、0308等無法進行解密。需再針對程式進行優化,才能應用在課堂中。
1.安裝套件:pip install pyzipper
2.建立壓縮檔Zip密碼範圍:0001~9999
3.建立壓縮檔Zip名稱:加密壓縮檔.zip
4.程式名稱:ZipPassBroken.py
5.程式內容:
2.建立壓縮檔Zip密碼範圍:0001~9999
3.建立壓縮檔Zip名稱:加密壓縮檔.zip
4.程式名稱:ZipPassBroken.py
5.程式內容:
import pyzipper
from multiprocessing import Process
import time
zip_file = pyzipper.AESZipFile("加密壓縮檔.zip",'r')
zip_flag = False
start_time = time.time()
# 開始破解壓縮檔密碼
def decode(start_pwd, end_pwd):
global zip_file
global zip_flag
for password in range(start_pwd, end_pwd):
try:
if zip_flag == False:
zip_file.extractall(pwd=str(password).encode())
print('成功破解,密碼:{}'.format(password))
end_time = time.time()
print("總共花費{}秒".format(end_time-start_time))
zip_file.close()
zip_flag = True
break
else:
break
except:
pass
if __name__ == '__main__':
print("正在破解...")
process_num = 1 # 設定要使用的process數量
workload = 12000 # 設定每個process負責破解的密碼數量
processes = []
# 建立processes
for i in range(process_num):
curr_process = Process( target = decode, args=(i*workload, (i+1)*workload))
processes.append(curr_process)
# 開始processes
for p in processes:
p.start()
# 等待各process完成
for p in processes:
p.join()
沒有留言:
張貼留言