AES 是一個對稱密碼分組算法,分組長度為128bit,密鑰長度為128、192 和 256 bit。
整個加密過程如下圖所示。

1.密鑰生成算法
密鑰擴展過程:
1) 將種子密鑰按下圖所示的格式排列,然后每32bit分別記為w[0]、w[1]、w[2]、w[3];

2)依次取問w[5],w[6].......w[43],記為w[j]
若j%4=0,則w[j]=w[j-4]⊕g(w[j-1]),否則w[j]=w[j-4]⊕w[j-1];
函數g的流程說明:
a) 將w循環左移8比特;
b) 分別對每個字節做S盒置換;
c) 與32比特的常量(RC[j/4],0,0,0)進行異或,RC是一個一維數組,RC = {0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1B}
2.字節替代(SubBytes)
將狀態矩陣中的元素通過S盒映射為一個新的字節:把該字節的高4位作為行值,低4位作為列值,取出S盒對應的元素作為輸出。
下圖(a)為S盒,圖(b)為S-1(S盒的逆)


S盒內部計算方法:
y=Ax-1+b
其中x*x-1=1mod(x8+x4+x3+x2+1),則x為輸入元素,y為S盒輸出元素。
3.行移位(ShiftRows)
將狀態矩陣的第0行左移0字節,第1行左移1字節,第2行左移2字節,第3行左移3字節

4.列混合(MixColumns)

將每列的元素乘以一個行列式進行替換。
5.輪密鑰加(AddRoundKey)

輪密鑰加是將128位輪密鑰Ki同狀態矩陣中的數據進行逐位異或操作
