對稱式加密可以用在哪裡呢?
![]() |
![]() |
圖一、tp-link路由器 | 圖二、路由器設定畫面 |
AES 演算法 - 前置步驟一(準備狀態陣列)
【步驟一】
將明文與金鑰由上至下、由左至右轉換為 狀態陣列 (State Array) 的形式 ,方便進行AES加密。
這段明文以多少bits儲存?
資料被分為四乘四陣列,包含 16 個字元,每個字元包含8bits。
※請將上方表格中的每一個十六進制字元依序填入狀態陣列中。(提示: 由上至下、由左至右)

數數看,這段明文包含空格共有 16個字元需要儲存,以字母o為例,其ASCII Code為 ,其二進制為 ,因此可以知道每個字元需要 8 bits的儲存空間。
※ 請開啟小算盤的「程式設計人員」功能,點擊 HEX 欄位後,輸入6F(o的十六進制),即可於DEC 欄位查看o的十進制,此值便是o的ASCII Code; 而 BIN 欄位則表示o的二進制。
16個字元 x bits = bits。
Ans: 在這個例子中,明文需要 128 bits儲存,剛好在AES演算法中視為1個區塊,因此不必切分明文。
AES 演算法 - 前置步驟二(準備每回合使用到的金鑰)
在此以AES-128 演算法為例,共需要進行10回合 (10 rounds)。
需經過先利用金鑰擴充的方式產生後續10把回合金鑰(如下圖所示),至於金鑰擴充的過程較為繁瑣,可自行延伸學習。

你剛剛填答完成的初始金鑰便是第0回合(Round 0)的金鑰,我們先將該金鑰以狀態陣列的形式前往下一步運算。
AES 演算法 - 四大函式
【步驟二】
請你分別操作以下四個函式,結束一回合的AES加密過程。回合鑰匙加法運算 | 位元組取代運算 | 列移位運算 | 混合行運算 |
![]() |
![]() |
![]() |
![]() |
函式功能:明文與 Round 0 Key相對應的矩陣值進行XOR運算,產生新的狀態陣列。
※目前「新的狀態陣列」有部分數值尚未計算完成,請分別在「明文」與「Round 0 key 」矩陣按下相對應的十六進位數值,經過XOR運算後,將十六進位數值填入「新的狀態陣列」中。XOR
=
3C | 63 | ||
1F | 22 | 74 | |
0E | 08 | 1B | 31 |
59 | 1A |
⊕ | ||
|
||
十六進制為: |

回合鑰匙加法運算 | 位元組取代運算 | 列移位運算 | 混合行運算 |
![]() |
![]() |
![]() |
![]() |
函式功能:將上個函式產生的狀態陣列與S-box對照,得出下一張新的狀態陣列。
在一格矩陣值當中,拆分成2個16進位數值,左值對應至S-Box的X軸,右值對應至Y軸,得出新值後即取代舊值,輸出新的狀態陣列。(這個尋找新值的過程,像是在劇院中找座位般,只不過多了取代舊值的動作。)
※目前「新的狀態陣列」有部分數值尚未設定完成,請點擊「目前的狀態陣列當中的數值」,查看相應的新值後,作答於「新的狀態陣列」中。
63 | EB | A0 | |
2F | 93 | 92 | |
AB | 30 | AF | |
20 | B3 | A2 |
S-Box

回合鑰匙加法運算 | 位元組取代運算 | 列移位運算 | 混合行運算 |
![]() |
![]() |
![]() |
![]() |
函式功能:將上個函式產生的狀態陣列進行移位,第一列不需移位,其餘二三四列,每隔皆需要移位,得出下一張新的狀態陣列。
※請先點選 「移位」規則 的按鈕,觀查移位的過程。




(請特別注意,一格只能放置一個矩陣值,請放在格子正中央的位置。)


回合鑰匙加法運算 | 位元組取代運算 | 列移位運算 | 混合行運算 |
![]() |
![]() |
![]() |
![]() |
函式功能:將上個函式產生的狀態陣列與常數矩陣相乘,得到該回合的最終狀態陣列。
※ 此處用到的乘法( X ) 為有限體運算的特殊乘法,有興趣者可延伸學習。

完成 AES 演算法!
➢ 恭喜你實際演練了 AES 演算法中,四大函式的重要精隨!原來AES演算法就是這樣保護wifi路由器的資料安全!
接下來的第2~9回合一樣依序經過四大函式的運算,比較特別的是,在最後第10合僅使用3個函式運算,輸出最終密文,完成AES加密。
➢ 實作目標
2. 若你是傳送方:
請修改自己的“1-4 AES_Encrypt.ipynb”程式碼,將一段自訂的訊息加密後,將程式碼印出的金鑰、密文,透過 e-mail 寄給對方。
金鑰、密文寄出格式務必完整,可參考如下:
key = b'JQh7Dya9sumqQQ3pTYVrsUl6MglIVVAr9T5o3GqYxJU='
cipher_msg = b'gAAAAABmo327cdIM_ZAXFfPu-b1nUmuasY_mZMNlRROawBZ5V2bXYwJ88FF2pkHuY1o_bYUIh51XZfPoJx96NMtvHCyA_pureA=='
確定收到來自傳送方的密文、金鑰 ,請修改自己的”1-4 AES_Decrypt.ipynb”程式碼,將密文解密為明文,最後請傳送方確認明文是否正確。