首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

用新的高級加密標準(AES)保護資料安全(五):AES 類別設計、建構函式參數與核心資料成員

     編輯:關於C語言

FIPS-197 規範導向設計

依循聯邦資訊處理標準出版物 197 (FIPS-197) 變數命名(Nb, Nk, Nr, w, State),雖晦澀但便於對照規範。

9 個核心資料成員 + 1 個列舉

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)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved