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

用新的高級加密標準(AES)保護資料安全(七):InvCipher 解密實作與 AES 類別使用示範

     編輯:關於C語言

InvCipher 核心原則:逆向還原每一步

AES 解密(InvCipher)按加密步驟逆序執行逆運算:InvShiftRows、InvSubBytes、AddRoundKey、InvMixColumns。注意:

  • 輪金鑰使用順序不完全為加密逆序。
  • 仍呼叫 AddRoundKey 而非 InvAddRoundKey(XOR 可逆,自我逆)。

逆運算細節

InvSubBytes:逆向 S-box 替換

使用 iSbox[] 替代 Sbox[]。若 Sbox[0x20] = 0xB7,則 iSbox[0xB7] = 0x20。

InvShiftRows:向右循環位移

  • Row 0:右移 0 位
  • Row 1:右移 1 位
  • Row 2:右移 2 位
  • Row 3:右移 3 位

InvMixColumns:GF(2^8) 逆矩陣乘法

係數為 0x0E, 0x0B, 0x0D, 0x09(加密為 0x01, 0x02, 0x03):

State[0,c] = 0x0E*State[0,c] + 0x0B*State[1,c] + 0x0D*State[2,c] + 0x09*State[3,c]
State[1,c] = 0x09*State[0,c] + 0x0E*State[1,c] + 0x0B*State[2,c] + 0x0D*State[3,c]
State[2,c] = 0x0D*State[0,c] + 0x09*State[1,c] + 0x0E*State[2,c] + 0x0B*State[3,c]
State[3,c] = 0x0B*State[0,c] + 0x0D*State[1,c] + 0x09*State[2,c] + 0x0E*State[3,c]

GF(2^8) 乘 0x0E 實作技巧

0x0E = 0x08 + 0x04 + 0x02 = 2^3 + 2^2 + 2^1,利用既有 gfmultby02 疊加:

return (byte)(
    (int)gfmultby02(gfmultby02(gfmultby02(b))) ^  // 2^3
    (int)gfmultby02(gfmultby02(b)) ^              // 2^2
    (int)gfmultby02(b)                            // 2^1
);

使用 AES 類別:極簡介面

Aes aes = new Aes(keySize, seedKey);
aes.Cipher(plainText, cipherText);
aes.InvCipher(cipherText, decipheredText);

針對位元組陣列操作,配合 Encoding.Unicode 即可加解密字串。Demo 程式(圖 16)接受 8 字元字串(16 位元組)演示完整流程。

AES Demo 程式介面

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