程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 用新的高級加密標准(AES)保持你的數據安全(2)

用新的高級加密標准(AES)保持你的數據安全(2)

編輯:關於C語言

Figure 2 S-盒( Sbox )

當 AES的構造函數(constructor)被調用時,用於加密方法的兩個表被初始化。第一個表是代替盒稱為S-盒。它是一個16×16的矩陣。S-盒的前五行和前五列如 Figure 2 所示。在幕後,加密例程獲取該密鑰數組並用它來生成一個名為w[]的密鑰調度表,Figure 3 所示。

Figure 3 密鑰調度表(Key Sched)

w[] 最初的 Nk (6) 行被作為種子,用原始密鑰值(0x00 到0x17)。剩余行從種子密鑰來產生。變量 Nk 代表以 32 位字為單位的種子密鑰長度。稍後我分析 AES 實現時你將清楚地看到 w[] 是怎樣產生的。 關鍵是這裡現在有許多密鑰使用而不只是一個。這些新的密鑰被稱為輪密鑰(round keys)以將它們與原始種子密鑰區別開來。

Figure 4 State (態)數組

AES 加密例程開始是拷貝 16 字節的輸入數組到一個名為State (態)的 4×4 字節矩陣中。(參見 Figure 4)。AES 加密算法 取名為Cipher,它操作 State[],其過程描述的偽代碼參見 Figure 5 。

在規范中,加密算法實現的一個預備的處理步驟被稱為AddRoundKey(輪密鑰加)。AddRoundKey 用密鑰調度表中的前四行對 State 矩陣實行一個字節一個字節的異或(XOR)操作,並用輪密鑰表 w[c,r] 異或 輸入 State[r,c]。

舉個例子,如果 State 矩陣的第一行保存的字節是{ 00, 44, 88, cc },第一列密鑰調度表是{ 00, 04, 08, 0c },那麼新的 State[0,2] 值是用 w[2,0]( 0x08 或 0x80 )異或 State[0,2](0x88)的結果:

1 0 0 0 1 0 0 0
0 0 0 0 1 0 0 0 XOR
1 0 0 0 0 0 0 0

AES 算法的主循環對 State 矩陣執行四個不同的操作,在規范中被稱為SubBytes(字節替換)、ShiftRows(行位移變換)、MixColumns(列混合變換)和AddRoundKey。除了每次循環 AddRoundKey 都被調用並使用密鑰調度表的下面四行外,AddRoundKey 與預備處理步驟中的 AddRoundKey 相同。SubBytes 例程是一個代替操作,它將 State 矩陣中的每個字節替換成一個由 Sbox 決定的新字節。比如,如果 State[0,1]的值是 0x40 如果你想找到它的代替者,你取 State[0,1]的值 (0x40) 並讓 x 等於左邊的數字(4)並讓 y 等於右邊的數字(0)。然後你用 x和y 作為索引 進到 Sbox 表中尋找代替值,如 Figure 2 所示。

ShiftRows 是一個置換操作,它將 State 矩陣中的字節向左旋轉。Figure 6 示范了 ShiftRows 如何操作 State[]。State的第0行被向左旋轉0個位置,State的第1行被向左旋轉1個位置,State的第2行被向左旋轉2個位置,而 State的第3行被向左旋轉3個 位置。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved