国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

hmac模塊生成加入了密鑰的消息摘要詳解

2020-02-16 11:35:27
字體:
供稿:網(wǎng)友

hmac模塊

hmac模塊用于生成HMAC碼。這個HMAC碼可以用于驗證消息的完整性,其原理也很簡單,就是一種加入了密鑰的消息摘要,相比起MAC更加安全。JWT(JSON Web Token)中第三部分的消息摘要就是使用了HMAC。

HMAC(Hash-based Message Authentication Code)

先大致介紹一下HMAC吧。HMAC是一種消息摘要算法,是一種特殊的MAC(消息認(rèn)證碼),內(nèi)部使用別的摘要算法進行摘要的計算(比如MD5)。相比MAC,HMAC在生成摘要的時候加入了密鑰,這使得HMAC碼不僅可以用于驗證消息完整性,并且保證了其無法被偽造。注意,摘要算法跟加密算法是有區(qū)別的。

整個算法可以總結(jié)為下圖 圖片來自wiki:

K:key,密鑰
K':調(diào)整長度之后的密鑰
m:message,消息
H:hash function,消息摘要算法
opad:outer padding,一個塊長度的十六進制常數(shù),Ox5c5c5c…5c
ipad:inner padding,一個塊長度的十六進制常數(shù),Ox363636…36

計算步驟:

如果K的長度大于使用的摘要算法的Block Size(比如MD5中是64),HMAC算法會先計算K的摘要,而當(dāng)K的長度小于Block Size時則用0進行填充。這一步得到結(jié)果K'。
將K'與ipad做異或運算。
上一步的結(jié)果加上m并計算消息摘要值。
將K'與opad做異或運算。
上一步的結(jié)果加上第三步的結(jié)果并計算消息摘要值,這一步的結(jié)果為最終結(jié)果。

hmac.HMAC(key, msg=None, digestmod=None)

hmac模塊中最核心的就是HMAC類,可以直接通過實例化來獲取該類的實例,也可以通過調(diào)用函數(shù)hmac.new(key, msg=None, digestmod=None)獲取。

參數(shù)key可以是一個bytes對象或者bytearray對象,是用于加密的密鑰。如果key大于Block Size(默認(rèn)是64),會先計算一次消息摘要,小于的話用0填充到與Block Size相同的長度。

參數(shù)msg是用于加密的消息。

參數(shù)digestmod是用于計算摘要的算法,默認(rèn)使用hashlib.md5。這個參數(shù)支持三種類型的值:

可以是hashlib里面的其他的構(gòu)造器,比如hashlib.sha1、hashlib.sha256等
可以是一個字符串,會調(diào)用hashlib.new(digestmod)獲取相應(yīng)的構(gòu)造器
可以是一個符合PEP247標(biāo)準(zhǔn)的模塊,這時會調(diào)用digestmod.new()

API

HMAC.update(msg)

更新HMAC對象的內(nèi)容,附加到之前的msg后面。

HMAC.digest()

返回消息摘要值。因為HMAC.update()會動態(tài)修改msg內(nèi)容,所以每次都會重新計算。

HMAC.hexdigest()

以十六進制的形式返回消息摘要值。因為HMAC.update()會動態(tài)修改msg內(nèi)容,所以每次都會重新計算。

HMAC.copy()

返回HMAC對象的克隆,用于在兩個對象內(nèi)容擁有相同部分的時候提高效率,修改克隆的對象不會影響原對象。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 香河县| 皮山县| 靖远县| 日喀则市| 松阳县| 苗栗县| 鄂尔多斯市| 察哈| 北安市| 桃源县| 阿城市| 正镶白旗| 萨迦县| 武川县| 改则县| 新河县| 石台县| 阳高县| 榆树市| 韶山市| 会泽县| 太保市| 葫芦岛市| 巴彦淖尔市| 离岛区| 临泽县| 开鲁县| 钦州市| 庆阳市| 宽城| 三河市| 石城县| 万山特区| 获嘉县| 石河子市| 安泽县| 盐山县| 阿坝| 三都| 道孚县| 荆州市|