MAC----message authentication code,保證數據完整性的一個技術。算法
HMAC相似於標準的sha運算,只是對於生成的mac增長了基於key的密鑰保護。app
生成的mac值,隨着sender的payload一塊兒發送給receiveder。code
receiveder,拿到mac先進行數據完整性的校驗-----從新計算payload,獲得本身的mac,與傳輸過來的mac進行比較。blog
HMAC對應的nist標準爲FIPS 198-1,其中只是規定了hmac的算法流程,mac計算engine,能夠使用nist中推薦的任何hash 算法。ip
HMAC須要的輸入信息;hash
1) hash engine的block size的大小(以byte爲單位),Bio
2) inner pad;byte---"0x36",重複B次;im
outer pad;byte---"0x5c",重複B次;技術
3) 輸入的key,長度任意,須要通過定義的padding,轉變爲K0;數據
流程:
1) padding key,目的是將輸入的任意長度的key,轉換爲block_size的大小。
若是輸入的key的長度小於等於block size的大小,直接append 「0」;
若是輸入的key的長度大於block size的大小,先進行hash engine計算,以後append 「0」,組成block size大小。
2) 計算兩次hash,輸出最終的mac值,
hash((K0+opad) || hash((K0+ipad) || text ))