---
# System prepended metadata

title: "密碼工程 HW3 \n學號: 311552031    姓名: 蔡品緣"

---

密碼工程 HW3 
學號: 311552031    姓名: 蔡品緣
===
***INPUT***
![](https://i.imgur.com/LPsUkyQ.png)

***步驟一***
先將加密過的文字檔輸入:
![](https://i.imgur.com/hP1eVRb.png)

***步驟二***
透過將加密文字分成n個groups，並分別計算IC，再將計算出n個groups的平均IC，找出最接近0.068或最大的IC的n即為key length。
![](https://i.imgur.com/j5hlIPB.png)

![](https://i.imgur.com/f0UgUmP.png)
這裡我設定n可能為1~9，並根據n將字串分成n groups(k % j 個 groups)，再透過上一次作業的方法計算IC，最後用key = j紀錄key length的大小。

***步驟三***
每個groups透過計算Chi-square的方法找出最小值，即為groups的shift位移量。
![](https://i.imgur.com/r46OlHI.png)
根據key length分別對每個group透過shift 0到shift 25(A->Z)來分別計算Chi-square並找出最小時來找出其shift位移量，並將i group的位移量儲存於shift[i]。
![](https://i.imgur.com/HHaILSI.png)
將位移量轉換成Chr即可找出key。

***步驟四***
將密文根據各個group的shift推移出明文。
![](https://i.imgur.com/gWs2EEW.png)
透過反向shift算出明文的char並儲存於finalans。

***步驟五***
將明文寫回message_out檔案。
![](https://i.imgur.com/g46T3oT.png)


***OUTPUT***
![](https://i.imgur.com/pTP92Cu.png)









