中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-21 21:28:15 來源:腳本之家 閱讀:186 作者:GanZiQim 欄目:開發技術

hmac模塊

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

HMAC(Hash-based Message Authentication Code)

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

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

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

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

計算步驟:

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

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

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

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

參數msg是用于加密的消息。

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

可以是hashlib里面的其他的構造器,比如hashlib.sha1、hashlib.sha256等
可以是一個字符串,會調用hashlib.new(digestmod)獲取相應的構造器
可以是一個符合PEP247標準的模塊,這時會調用digestmod.new()

API

HMAC.update(msg)

更新HMAC對象的內容,附加到之前的msg后面。

HMAC.digest()

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

HMAC.hexdigest()

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

HMAC.copy()

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

有一個地方很有意思,這個函數在內部是調用self.__class__.__new__(self.__class__),再把關鍵參數賦值給新對象,這樣做會比直接調用__init__的效率高一些。

屬性

HMAC.digest_size

摘要值的長度。

HMAC.block_size

如果根據參數digestmod獲取的構造器沒有Block Size或者小于16,會使用默認值64。

HMAC.name

HMAC的名字,值為hmac-{內部摘要算法名字},比如hamc-md5。

hmac.compare_digest(a, b)

在hmac模塊中,通過from _operator import _compare_digest as compare_digest引入了這個函數。這個函數簡單點來說就是用來比較a與b值是否相等的,當將外部輸入的值與HMAC.degest()/HMAC.hexdigest()的輸出做比較時,有可能會遭到時序攻擊,所以可以通過調用這個函數比較值并防御可能存在的攻擊行為。Python3.3版本后新增。

至于什么是“時序攻擊”,大家可以自行上wiki查閱,或者查看知乎上的問答如何通俗地解釋時序攻擊。

總結

以上就是本文關于hmac模塊生成加入了密鑰的消息摘要詳解的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

改则县| 衢州市| 鄯善县| 南通市| 鄱阳县| 望都县| 金堂县| 明水县| 南木林县| 吉安市| 东光县| 韶关市| 榆中县| 碌曲县| 涿鹿县| 东源县| 天峨县| 本溪| 城市| 兴隆县| 龙游县| 遂昌县| 泌阳县| 高要市| 靖安县| 溧阳市| 砀山县| 静安区| 琼中| 政和县| 会宁县| 盖州市| 滦平县| 贺兰县| 龙游县| 广饶县| 昂仁县| 南安市| 宾阳县| 吴忠市| 呼玛县|