AES加解密 - killelder/cryptocurrency GitHub Wiki
AES的原理是在一個稱為state的4*4 Byte矩陣上運作, 包含了四種運算
1. AddRoundKey :資料與金鑰做 XOR 運算,也就是 b[i,j] = a[i,j] xor k[i,j]。
2. SubBytes :透過 S-Box 函數 S 將每個 Byte 做轉換,也就是 b[i,j] = S( a[i,j] )。
3. ShiftRows :對於矩陣的每一橫列進行 Shift 移位的動作,移位的步伐大小與列號成正比。
4. MixColumns :對於矩陣的每一直行,與一個多項式 c(x) 進行多項式乘法。
AES 的加密與解密,都需要進行金鑰展開的 KeyExpansion() 動作
加密
(1). 對第一個區塊,進行下列動作
1. AddRoundKey()
(2). 從第二個區塊開始,對每個區塊都執行下列動作
1. SubBytes()
2. ShiftRows()
3. MixColumns()
4. AddRoundKey()
(3). 對最後一個區塊,執行下列動作
1. SubBytes()
2. ShiftRows()
3. AddRoundKey()
解密
(1). 對最後一個區塊,進行下列動作
1. AddRoundKey()
2. ShiftRows()
3. SubBytes()
(2). 從倒數第二個區塊開始,對每個區塊都執行下列動作
4. AddRoundKey()
3. MixColumns()
2. ShiftRows()
1. SubBytes()
(3). 對第一個區塊,執行下列動作
1. AddRoundKey()