HMAC 算法原理
一、什么是 HMAC
HMAC 算法是一種基于密鑰的報文完整性的驗證方法?,其安全性是建立在 Hash 加密算法基礎上的。它要求通信雙方共享密鑰、約定算法、對報文進行 Hash 運算,形成固定長度的認證碼。通信雙方通過認證碼的校驗來確定報文的合法性。?
HMAC 算法可以用來作數字簽名、報文驗證等?。(我感覺實際情況中用 HMAC 做加密也是為的不可逆加密,不像用 DES / AES 這種可逆加密;感覺 HMAC 和隨機鹽 Hash 算法非常像)
一句話總結:HMAC 是密鑰相關的哈希運算消息認證碼(Hash-based Message Authentication Code),HMAC運算利用哈希算法,以一個密鑰和一個消息為輸入,生成一個消息摘要作為輸出。
二、HMAC算法的定義
HMAC 算法是一種執行“校驗和”的算法,它通過對數據進行“校驗”來檢查數據是否被更改了。在發送數據以前,HMAC 算法對數據塊和雙方約定的公鑰進行“散列操作”,以生成稱為“摘要”的東西,附加在待發送的數據塊中。當數據和摘要到達其目的地時,就使用 HMAC 算法來生成另一個校驗和,如果兩個數字相匹配,那么數據未被做任何篡改。否則,就意味著數據在傳輸或存儲過程中被某些居心叵測的人作了手腳。
HMAC 算法的定義用公式表示如下:
HMAC(K,M) = H( (K⊕opad) | H( (K⊕ipad) | M) )- ipad 為 0x36 重復 B(SHA_BLOCKSIZE)?次
- opad 為 0x5c 重復 B(SHA_BLOCKSIZE) 次
HMAC算法的加密步驟
1、在密鑰 K 后面添加 0 或者對密鑰 K 用 H 進行處理來創建一個字長為 B 的字符串。
(例如,如果 K 的字長是 20 字節,B=64 字節,則 K 后會加入 44 個零字節 0x00;如果 K 的字長是 120 字節,B=64 字節,則會用 H 作用于 K 后產生 64 字節的字符串)
2、將上一步生成的 B 字長的字符串與 ipad 做異或運算。
3、將數據流 text(待簽名的數據) 填充至第二步的結果字符串中。
4、用 H 作用于第 3 步生成的數據流。
5、將第一步生成的 B 字長字符串與 opad 做異或運算。
6、再將第 4 步的結果填充進第五步的結果中。
7、用 H 作用于第 6 步生成的數據流,輸出最終結果 。
用圖表示就是:
轉載:HMAC算法原理 - 蒹葭蒼蒼呀 - 博客園
(SAW:Game Over!)?
總結
- 上一篇: Maven面试题及答案
- 下一篇: 快速恢复Safengine Protec