# Project5-1_Enigma_machine - [Encode(9/17-9/24)](#Encode(9/17-9/24)) - [Decode(9/24-10/1)](#Decode(9/24-10/1)) - [GitHub](https://github.com/cislab-yzu/Project5-1_Enigma_machine) # Encode(9/17-9/24) ## 分工表 學號 姓名 | 分工 | 功能&貢獻 | -------- | -------- | -------- | 1051432 林韶恩(12%) | rotate | 實現轉盤旋轉的動作 1051422 張浩荃(12%) | readfile | 讀取設定檔並將字母轉換成數字(A -> 0, B -> 1, ......) 1051446 游采蓉(12%) | main | 呼叫readfile、initial、encode 1051507 林益聖(12%) | encod(判斷旋轉的時機) | 判斷轉盤是否該旋轉 1051508 李宗懋(12%) | encod(加密) | 從plug經過3個rotor到reflector再回來的過程 1053325 鐘偉豪*(28%) | 整合、測試、PM | 整合全部人的function以及測試功能,居中協調 1053349 林剛煇(12%) | initial | 初始化3個轉盤 ## 流程圖 ``` 明文 -> plugboard -> rotorIII -> rotorII -> rotorI -> reflector -> rotorI -> rotorII -> rotorIII -> plugboard -> 密文 ``` ## 流程說明 - [明文 -> plugboard](#明文--gt-plugboard) - [plugboard -> rotorIII](#plugboard--gt-rotorIII) - [rotorIII -> rotorII](#rotorIII--gt-rotorII) - [rotorII -> rotorI](#rotorII--gt-rotorI) - [rotorI -> reflector](#rotorI--gt-reflector) - [reflector -> rotorI](#reflector--gt-rotorI) - [rotorI -> rotorII](#rotorI--gt-rotorII) - [rotorII -> rotorIII](#rotorII--gt-rotorIII) - [rotorIII -> plugboard -> 密文](#rotorIII--gt-plugboard--gt-密文) ### 明文 -> plugboard plugboard本身是一個list,用明文當作index來找到對應的字母,EX: 明文A -> plugboard B ### plugboard -> rotorIII 使用前面得到的字母當作內圈的index找到rotorIII的內圈字母,接著找到外圈字母的位置,舉例來說,假設內圈字母為C,需要找到的就是外圈中字母C的位置,EX: [Y,Z,A,B,C,.....]以這個list為例,C的位置是4 ### rotorIII -> rotorII 跟上面一樣,使用剛剛在rotorIII找到的外圈位置,以上面的例子來說就是4,用這個當作rotorII內圈的index,接著就找該字母在rotorII外圈所在的位置。 ### rotorII -> rotorI 同rotorIII -> rotorII ### rotorI -> reflector 與明文->plugboard一樣,使用前一步所得到的字母當作index找到對應的字母 ### reflector -> rotorI 假設前一步得到的字母為S,轉換成數字就是18(A = 0, B = 1,....),則在這一步驟中,我們要先找到rotorI外圈index=18的字母是甚麼,假設外圈index=18找到的字母是Z,接下來就是找到內圈中Z在哪個位置,也就是內圈中Z的index是多少 ### rotorI -> rotorII 上一步會得到一個index,在這一步驟中要做的事情跟上面是一樣的,藉由前面得到的index找到外圈字母,接著再藉由外圈字母找到內圈該字母所在的位置,EX: 前一步所得到的index為2,在rotorII外圈中index=2為F,接下來去找到內圈中F的位置,假設為19 ### rotorII -> rotorIII 同rotorI -> rotorII ### rotorIII -> plugboard -> 密文 就跟一開始一樣,用前一步得到的字母當作index,找到對應的字母,並將此字母回傳 --- # Decode(9/24-10/1) ## 分工表 學號 姓名 | 分工 | 功能&貢獻 | -------- | -------- | -------- | 1051432 林韶恩(12%) | 驗證答案 | 確認Enigma出來的答案是否正確且計算已跑之組合數 1051422 張浩荃(12%) | random plugboard | 把plugboard所有組合排列出來 1051446 游采蓉(12%) | 調整GitHub & HackMD | GitHub ReadMe.md排版以及HackMD紀錄 1051507 林益聖(20%) | random rotor、執行程式 | Rotor與對應Arrow的排列組合、最終審核與執行程式 1051508 李宗懋(12%) | random plugboard | 把plugboard所有組合排列出來 1053325 鐘偉豪*(20%) | 修改Enigma、最終審核 | 整合原來Enigma成一個function、最終審核整合程式碼 1053349 林剛煇(12%) | start position | 決定rotor初始化位置 # README ## plugboard 使用random的方式隨機交換6組字母 ## rotor 已經把rotorIII固定,所以剩下4個rotor取2個作排列組合=12種組合 ## start position 使用3層for迴圈窮舉所有可能共26*26*26總可能性 ## validation 呼叫enigma以及判斷enigma回傳值是否符合密文 ## enigma function 將上次讀enigma整合成一個function以供validation呼叫 # 討論過程與結果 一開始我們計算出了全部的可能性有1京多,此外還克服重複的問題,因此我們最後決定用random的方式產生plugboard,rotor的部分我們固定第一顆為rotorIII,剩下4顆rotor共組成12種可能。我們決定分成兩部分同時進行以加快破密速度,每部份負責6種可能,start position的部分我們採用3層for迴圈的方式來產生全部可能。最後在validation的部分,我們每次都會呼叫enigma,每此傳入的input為HEILHILTER,並比對由enigma回傳的加密後字母是否一樣。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up