2023年5月10日 星期三

關於國中資訊科技-加密的補充教材-python 破解壓縮檔ZIP的密碼

        目前連結著課本6-2-2 第二節 加密。該章節介紹兩種加密方法,分別是凱薩密碼與維吉尼亞密碼。  
        為了讓學生實作加密解密的過程,就使用壓縮檔ZIP來進行加密與解密。主要的理由,加密的長度可以控制在數字四碼內,用暴力破解法可以在短時間內得到結果。若數字加入英文字母大小寫來進行加密的話,整個時間會拉長到一個小時以上。對於課程進度,就會顯得難以掌握。
        目前使用的程式碼則是來自資料來源1。學生測試的結果發現四個數字中,0000、0308等無法進行解密。需再針對程式進行優化,才能應用在課堂中。

1.安裝套件:pip install pyzipper
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()
       

沒有留言:

張貼留言

軟體定義網路SDN-主題2-1 OpenFlow 概述

學習目標: 一.介紹OpenFlow特性 二.介紹OpenFlow Ports:實體port、邏輯port、保留port 一.介紹OpenFlow特性 1.OpenFlow 是 (1).控制器與交換器之間溝通的通訊協定 (2)使用了TCP (port 6653;舊版 port 6...