1. 程式人生 > >AES加密演算法詳解

AES加密演算法詳解

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同狀態矩陣中的資料進行逐位異或操作