依循聯邦資訊處理標準出版物 197 (FIPS-197) 變數命名(Nb, Nk, Nr, w, State),雖晦澀但便於對照規範。
public enum KeySize { Bits128, Bits192, Bits256 }
private int Nb; // 區塊長度(字),固定 4
private int Nk; // 金鑰長度(字),4/6/8
private int Nr; // 輪數,10/12/14
private byte[] key; // 種子金鑰位元組陣列
private byte[,] Sbox; // 正向 S-box [16,16]
private byte[,] iSbox; // 逆向 S-box [16,16]
private byte[,] w; // 金鑰調度表 [Nb*(Nr+1), 4]
private byte[,] Rcon; // 輪常數表 [Nr+1, 4]
private byte[,] State; // 狀態矩陣 [4, Nb]
// 建構
Aes aes = new Aes(KeySize.Bits192, seedKeyBytes);
// 加密
aes.Cipher(plainTextBytes, cipherTextBytes);
// 解密
aes.InvCipher(cipherTextBytes, decipheredBytes);
方法命名遵循規範(Cipher/InvCipher)。
public Aes(KeySize keySize, byte[] keyBytes)
{
SetNbNkNr(keySize);
this.key = new byte[Nk * 4];
keyBytes.CopyTo(this.key, 0);
BuildSbox();
BuildInvSbox();
BuildRcon();
KeyExpansion();
}
SetNbNkNr 依 KeySize 設定 Nk, Nr(Nb 恆為 4)。