2023年5月26日 星期五

關於國中資訊科技-自動化的補充教材- -瀏覽器自動化操作

        最近發現學生很喜歡CPS手速測試 - 鼠標點擊速度測試,測試滑鼠點擊次數。那有沒有辦法用程式來控制滑鼠、鍵盤,就可以登入Google ClassRoom。目前有兩種方法:1.pyautogui、 2.selenium。使用1.pyautogui,需要量測時間才能決定下一步。也就是無法用if -else 來控制。但是2.selenium 可以通過網址的變化來控制。也就是可以用if -else 來控制。
        現在就利用一個範例來說明2.selenium可以通過網址的變化來控制。此範例名稱為 Py20230526-0001.py。
        安裝套件:pip install selenium==2.53.6
        為何要指定2.53.6 版本,目前最新版本為4.9.1。理由是2.53.6版的網路資源最多。以後的版本則是語法變更,相對應的網路資源較少。
        下載Chrome的WebDriver:https://chromedriver.chromium.org/  
        那要如何知道Chrome版本?
        下載後,所得到的檔案chromedriver_win32.zip需解壓縮。解壓縮後,chromedriver.exe需與我們要編譯的Py20230526-0001.py同一目錄,或是在Py20230526-0001.py指定chromedriver.exe的位置(path)。
        那要如何知道搜尋列的class_name?

        程式名稱:Py20230526-0001.py
        程式內容:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
browser = webdriver.Chrome("C:\\Users\\m\\selenium\\chromedriver.exe")
# 前往的網址
Url = "https://www.google.com.tw"
browser.get(Url)
browser.find_element_by_class_name("gLFyf").click()
browser.find_element_by_class_name("gLFyf").send_keys("Python Selenium")
browser.find_element_by_class_name("gLFyf").send_keys('\ue007')
# 取得目前網頁網址
CurrentUrl = browser.current_url
# 判別頁面更新則停留60秒
if CurrentUrl != Url:
    time.sleep(60)
browser.quit()

2023年5月19日 星期五

關於國中資訊科技-加密的補充教材-pdf 加密


        由於在資訊科技課程裡,提到[加密]與[解密]。希望讓學生能夠實作[pdf加密]與[pdf解密],那要如何實作?
        目前實作的方式,則是利用Word轉PDF,在PDF上加密。如下圖:
以Word2010為例:
        此時,加密的長度會是6~32位元。那在學生解密時,會花較多時間解密。當密碼長度越長時,解密所花的時間就越長。目前在一節課的時間內,讓學生能夠完成加密與解密。所以,希望pdf 加密的密碼長度能夠限制在四位數以內。因此,需要利用Python程式對pdf加密。
        在資料來源1.,提供一個加密python程式。在Python編譯過程中,會出現錯誤訊息。其中錯誤原因是套件PyPDF2的版本須限制在3.0.0(含)以內。因此,安裝套件PyPDF2 版本為2.9.0。整個過程步驟如下:
1.安裝套件:pip install pypdf2==2.9.0
2.程式碼與需加密的PDF放置位置:
重要:程式碼與需加密的PDF須放置同一位置。
以自己的電腦為例:
或是


3.完整程式碼如下:
需加密的PDF檔名:test.pdf
程式碼檔名:PdfEnCryption01.py
程式碼內容:
from PyPDF2 import PdfFileWriter, PdfFileReader
path = 'test.pdf' # 這裡填寫目標 PDF 所在的路徑

pdf_reader = PdfFileReader('test.pdf')
pdf_writer = PdfFileWriter()

for page in range(pdf_reader.getNumPages()):
    pdf_writer.addPage(pdf_reader.getPage(page))
pdf_writer.encrypt('a123') # 設置密碼為 a123
with open('test.pdf', 'wb') as out:
    pdf_writer.write(out)


資料來源:


2023年5月10日 星期三

關於國中資訊科技-加密的補充教材-python 凱薩密碼實作

        目前連結著課本6-2-2 第二節 加密。該章節介紹兩種加密方法,分別是凱薩密碼與維吉尼亞密碼。 那希望學生能體會凱薩密碼實作的效果。因此,在此引進網路所蒐尋到的實作資料。
        首先是引進資料來源1,該程式碼如下:
#凱撒密碼加密
P = input()
ABC = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
CBA = "DEFGHIJKLMNOPQRSTUVWXYZABCdefghijklmnopqrstuvwxyzabc"
u = len(P)
for i in range(u):
    s = P[i]
    if s in ABC:
        n=ABC.index(s)
        print(CBA[n],end='')
    else:
        print(s,end='')


#凱撒密碼解密
P = input()
ABC = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
CBA = "DEFGHIJKLMNOPQRSTUVWXYZABCdefghijklmnopqrstuvwxyzabc"
u = len(P)
for i in range(u):
    s = P[i]
    if s in CBA:
        n=CBA.index(s)
        print(ABC[n],end='')
    else:
        print(s,end='')


        資料來源1程式碼可以引導學生認識凱薩密碼的金鑰為何?

        改善程式:上述程式,並沒有金鑰(位移量)概念。因此,更改為
# 加密
str = input("請輸入明文:")
key = int(input("請輸入金鑰:"))

for i in range(len(str)):
    if ord(str[i]) >= ord('a') and ord(str[i]) <= ord('z'):
        print(chr((ord(str[i])+key-ord('a'))%26+ord('a')),end='')
    elif ord(str[i]) >= ord('A') and ord(str[i]) <= ord('Z'):
        print(chr((ord(str[i])+key-ord('A'))%26+ord('A')),end='')
    else:
        print(str[i],end='')

# 解密
str = input("請輸入明文:")
key = int(input("請輸入金鑰:"))

for i in range(len(str)):
    if ord(str[i]) >= ord('a') and ord(str[i]) <= ord('z'):
        print(chr((ord(str[i])-key-ord('a'))%26+ord('a')),end='')
    elif ord(str[i]) >= ord('A') and ord(str[i]) <= ord('Z'):
        print(chr((ord(str[i])-key-ord('A'))%26+ord('A')),end='')
    else:
        print(str[i],end='')


資料來源:
4.
.

關於國中資訊科技-加密的補充教材-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...