天天看點

消息摘要算法-MAC算法系列

一、簡述

  mac(message authentication code,消息認證碼算法)是含有密鑰散列函數算法,相容了md和sha算法的特性,并在此基礎上加上了密鑰。是以mac算法也經常被稱作hmac算法。關于hmac算法的詳情可以參看rfc 2104(http://www.ietf.org/rfc/rfc2104.txt),這裡包含了hmacmd5算法的c語言實作。

  這裡需要說明的是經過mac算法得到的摘要值也可以使用十六進制編碼表示,其摘要值得長度與實作算法的摘要值長度相同。例如 hmacsha算法得到的摘要長度就是sha1算法得到的摘要長度,都是160位二進制數,換算成十六進制的編碼為40位。

二、模型分析

甲乙雙方進行資料交換可以采取如下流程完成

1、甲方向乙方公布摘要算法(就是指定要使用的摘要算法名)

2、甲乙雙方按照約定構造密鑰,雙方擁有相同的密鑰(一般是一方構造密鑰後通知另外一方,此過程不需要通過程式實作,就是雙方約定個字元串,但是這個字元串可不是随便設定的,也是通過相關算法擷取的)

3、甲方使用密鑰對消息做摘要處理,然後将消息和生成的摘要消息一同發送給乙方

4、乙方收到消息後,使用甲方已經公布的摘要算法+約定好的密鑰 對收到的消息進行摘要處理。然後比對自己的摘要消息和甲方發過來的摘要消息。甄别消息是否是甲方發送過來的

三、mac系列算法支援表

算法 摘要長度 備注

hmacmd5 128 java6實作

hmacsha1 160 java6實作

hmacsha256 256 java6實作

hmacsha384 384 java6實作

hmacsha512 512 java6實作

hmacmd2 128 bouncycastle實作

hmacmd4 128 bouncycastle實作

hmacsha224 224 bouncycastle實作

四、sun以及bouncycastle的hmac算法實作

五、總結

1、sun支援了5中算法,但是不支援轉成16進制,但是可以用commons codec或者bouncycastle的16進制轉換協助進行轉換

2、bouncycastle支援補充了三種算法,并支援16進制轉換

繼續閱讀