hmac模塊生成加入了密鑰的消息摘要詳解-創(chuàng)新互聯(lián)

hmac模塊

創(chuàng)新互聯(lián)公司專注于青羊企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),商城網(wǎng)站定制開發(fā)。青羊網(wǎng)站建設(shè)公司,為青羊等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

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

HMAC(Hash-based Message Authentication Code)

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

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

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

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

計(jì)算步驟:

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

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

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

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

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

參數(shù)digestmod是用于計(jì)算摘要的算法,默認(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)的模塊,這時(shí)會調(diào)用digestmod.new()

API

HMAC.update(msg)

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

HMAC.digest()

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

HMAC.hexdigest()

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

HMAC.copy()

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

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

屬性

HMAC.digest_size

摘要值的長度。

HMAC.block_size

如果根據(jù)參數(shù)digestmod獲取的構(gòu)造器沒有Block Size或者小于16,會使用默認(rèn)值64。

HMAC.name

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

hmac.compare_digest(a, b)

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

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

總結(jié)

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

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

本文名稱:hmac模塊生成加入了密鑰的消息摘要詳解-創(chuàng)新互聯(lián)
瀏覽路徑:http://muchs.cn/article40/dhsgeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站云服務(wù)器、微信公眾號定制開發(fā)、品牌網(wǎng)站設(shè)計(jì)、全網(wǎng)營銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)