最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2018年01月11日 10:21:34   作者:GanZiQim  
這篇文章主要介紹了hmac模塊生成加入了密鑰的消息摘要詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下

hmac模塊

hmac模塊用于生成HMAC碼。這個(gè)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ū)別的。

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

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

計(jì)算步驟:

如果K的長度大于使用的摘要算法的Block Size(比如MD5中是64),HMAC算法會(huì)先計(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可以是一個(gè)bytes對象或者bytearray對象,是用于加密的密鑰。如果key大于Block Size(默認(rèn)是64),會(huì)先計(jì)算一次消息摘要,小于的話用0填充到與Block Size相同的長度。

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

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

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

API

HMAC.update(msg)

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

HMAC.digest()

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

HMAC.hexdigest()

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

HMAC.copy()

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

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

屬性

HMAC.digest_size

摘要值的長度。

HMAC.block_size

如果根據(jù)參數(shù)digestmod獲取的構(gòu)造器沒有Block Size或者小于16,會(huì)使用默認(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引入了這個(gè)函數(shù)。這個(gè)函數(shù)簡單點(diǎn)來說就是用來比較a與b值是否相等的,當(dāng)將外部輸入的值與HMAC.degest()/HMAC.hexdigest()的輸出做比較時(shí),有可能會(huì)遭到時(shí)序攻擊,所以可以通過調(diào)用這個(gè)函數(shù)比較值并防御可能存在的攻擊行為。Python3.3版本后新增。

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

總結(jié)

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

相關(guān)文章

  • Django使用paginator插件實(shí)現(xiàn)翻頁功能的實(shí)例

    Django使用paginator插件實(shí)現(xiàn)翻頁功能的實(shí)例

    今天小編就為大家分享一篇關(guān)于Django使用paginator插件實(shí)現(xiàn)翻頁功能的實(shí)例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • python實(shí)現(xiàn)的一只從百度開始不斷搜索的小爬蟲

    python實(shí)現(xiàn)的一只從百度開始不斷搜索的小爬蟲

    這是我第三天學(xué)python了, 想寫一個(gè)東西紀(jì)念一下吧,于是寫了一直爬蟲,但是不是好的蟲,只能講網(wǎng)頁的關(guān)鍵詞存到本地, 但是我覺得基本上算是一只小蟲了
    2013-08-08
  • Python通過正則庫爬取淘寶商品信息代碼實(shí)例

    Python通過正則庫爬取淘寶商品信息代碼實(shí)例

    這篇文章主要介紹了Python通過正則庫爬取淘寶商品信息代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 簡單理解Python中基于生成器的狀態(tài)機(jī)

    簡單理解Python中基于生成器的狀態(tài)機(jī)

    這篇文章主要介紹了簡單理解Python中基于生成器的狀態(tài)機(jī),來自于IBM官方技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • Python進(jìn)行指數(shù)和對數(shù)曲線擬合詳解

    Python進(jìn)行指數(shù)和對數(shù)曲線擬合詳解

    曲線擬合是構(gòu)造曲線或數(shù)學(xué)函數(shù)的過程,其具有對一系列數(shù)據(jù)點(diǎn)的最佳擬合,可能受到約束,本文主要介紹了如何使用Python實(shí)現(xiàn)指數(shù)和對數(shù)曲線擬合,需要的可以參考下
    2024-04-04
  • Python?Fire實(shí)現(xiàn)自動(dòng)生成命令行接口

    Python?Fire實(shí)現(xiàn)自動(dòng)生成命令行接口

    命令行程序是平時(shí)寫一些小工具時(shí)最常用的方式,隨著命令行程序功能的豐富,也就是參數(shù)多了以后,解析和管理參數(shù)之間的關(guān)系會(huì)變得越來越繁重,而本次介紹的?Fire?庫正好可以解決這個(gè)問題,下面我們就來看看具體實(shí)現(xiàn)方法吧
    2023-09-09
  • Django model重寫save方法及update踩坑詳解

    Django model重寫save方法及update踩坑詳解

    這篇文章主要介紹了Django model重寫save方法及update踩坑詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python OpenCV圖像的位運(yùn)算操作

    Python OpenCV圖像的位運(yùn)算操作

    位運(yùn)算是計(jì)算機(jī)科學(xué)中一種基礎(chǔ)而高效的操作,它直接對二進(jìn)制位進(jìn)行處理,在圖像處理中,位運(yùn)算也是一種重要的技術(shù),尤其在圖像的合成、分離、掩模處理等場景中,常常用到位運(yùn)算,本文將介紹圖像處理中的常見位運(yùn)算操作,需要的朋友可以參考下
    2024-12-12
  • Python實(shí)現(xiàn)豎排打印傳單手機(jī)號碼易撕條

    Python實(shí)現(xiàn)豎排打印傳單手機(jī)號碼易撕條

    這篇文章主要介紹了Python實(shí)現(xiàn)豎排打印傳單手機(jī)號碼易撕條,代碼非常簡單,功能很實(shí)用,推薦給大家,有需要的小伙伴,參考下
    2015-03-03
  • python深度學(xué)習(xí)之多標(biāo)簽分類器及pytorch實(shí)現(xiàn)源碼

    python深度學(xué)習(xí)之多標(biāo)簽分類器及pytorch實(shí)現(xiàn)源碼

    這篇文章主要為大家介紹了python深度學(xué)習(xí)之多標(biāo)簽分類器的使用說明及pytorch的實(shí)現(xiàn)源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-01-01

最新評論

彭州市| 焦作市| 星子县| 花莲县| 白山市| 呼图壁县| 怀远县| 新巴尔虎左旗| 阿荣旗| 靖宇县| 鞍山市| 茌平县| 金溪县| 灌阳县| 长丰县| 闽侯县| 嘉鱼县| 延津县| 海城市| 慈利县| 通辽市| 吉首市| 余姚市| 内乡县| 清水县| 都匀市| 商南县| 东山县| 萝北县| 巴里| 塔河县| 昭觉县| 壶关县| 裕民县| 正蓝旗| 双流县| 孙吴县| 临海市| 延庆县| 海淀区| 横山县|