本文假設你熟悉 C#和位(bit)操作。
摘要
AES(The Advanced Encryption Standard)是美國國家標准與技術研究所用於加密電子數據的規范。它被預期能成為人們公認的加密包括金融、電信和政府數字信息的方法。本文展示了AES的概貌並解析了它使用的算法。包括一個完整的C#實現和加密.Net數據的舉例。在讀完本文後你將能用AES加密、測試 基於AES的軟件並能在你的系統中使用AES加密。
美國國家標准與技術研究所(NIST)在2002年5月26日建立了新的高級數據加密標准(AES)規范。本文中我將提供一個用C#編寫的的能運行的 AES 實現,並詳細解釋到底什麼是 AES 以及編碼是如何工作的。我將向您展示如何用 AES 加密數據並擴展本文給出的代碼來開發一個商業級質量的 AES 類。我 還將解釋怎樣把 AES 結合到你的軟件系統中去和為什麼要這麼做,以及如何測試基於AES的軟件。
注意本文提供的代碼和基於本文的任何其它的實現都在聯邦加密模塊出口控制的適用范圍之內(詳情請參看 Commercial Encryption Export Controls )。
AES 是一個新的可以用於保護電子數據的加密算法。明確地說,AES 是一個迭代的、對稱密鑰分組的密碼,它可以使用128、192和256 位密鑰,並且用 128 位(16字節)分組加密和解密數據。與公共密鑰密碼使用密鑰對不同,對稱密鑰密碼使用相同的密鑰加密和解密數據。通過分組密碼返回的加密數據的位數與輸入數據相同。迭代加密使用一個循環結構,在該循環中重復置換(permutations )和替換(substitutions)輸入數據。Figure 1 顯示了 AES 用192位密鑰對一個16位字節數據塊進行加密和解密的情形。
Figure 1 部分數據
AES算法概述
AES 算法是基於置換和代替的。置換是數據的重新排列,而代替是用一個單元數據替換另一個。AES 使用了幾種不同的技術來實現置換和替換。為了闡明這些技術,讓我們用 Figure 1 所示的數據討論一個具體的 AES 加密例子。下面是你要加密的128位值以及它們對應的索引數組:
00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
192位密鑰的值是:
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17
0 1 2 3 4 5 6 7 8 9 10 1112 13 14 15 16 17 18 19 20 21 22 23