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()
       

沒有留言:

張貼留言

30分鐘 docker 入門筆記

        課程內容: 一.基本概念 二.安裝配置 三.常用命令 四.構建鏡像 五.運行容器 六.Docker Compose & Kubernetes Docker 簡介:         Docker 是一個用於構建(build)、運行(run)、傳送(share...