HMAC (Keyed-Hash Message Authentication Code) 結合密鑰與雜湊函數,能在不加密明文前提下驗證文件完整性。本文實現一款圖形化工具:用戶輸入密鑰生成 .vri 校驗檔,後續可離線驗證文件是否被篡改。核心採用 SHA-256 作為底層雜湊,安全性優於 MD5/SHA-1。
標準結構:H(K ⊕ opad || H(K ⊕ ipad || M)),其中 ipad=0x36重複、opad=0x5c重複、K+ 為密鑰左填 0 至區塊長度 b=64 位元組。
效率優化:預計算 H(K ⊕ ipad) 與 H(K ⊕ opad),密鑰不變時僅需一次預計算。文中為簡化實現,每次雙邊同算,並說明密鑰填充採低位填充 (右側) 而非標準高位填充。
Sha256:純粹雜湊黑盒,輸出 256 位 (8×32 位字)HMac:封裝 HMAC 邏輯,變量名對應圖示 (A1-H1, A2-H2 為預計算中間值)Mac:無行為的結果容器,存儲最終 MAC 值// 預計算第一輪
for(i=0;i<Mb;i++) S[i]=sKeyplus[i]^ipad[i];
m_sha256.Init(Mb); m_sha256.GenW(S,Mb); m_sha256.Steps();
m_dwA1=m_sha256.OA; ... m_dwH1=m_sha256.OH; // 8×32位展開存儲
預計算結果拆解為 8 個 32 位整數 (A1-H1),同理第二輪得 A2-H2。文中詳細解釋此展開存儲原因。
.vri 檔 (首次運行自動關聯)gamsn,最大 16 字節)生成校驗檔同理:選單「生成校驗文件」→ 選源文件 → 輸入密鑰 → 自動產出 .vri。
支援文件拖放、序列化存儲、檔案關聯註冊,適合初學者參考 MFC 文檔/視圖架構下的常用技巧。推薦深入學習參考《Cryptography and Network Security》(William Stallings)。