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

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

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

hmac模塊

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

HMAC(Hash-based Message Authentication Code)

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

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

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

計算步驟:

如果K的長度大于使用的摘要算法的Block Size(比如MD5中是64),HMAC算法會先計算K的摘要,而當(dāng)K的長度小于Block Size時則用0進(jìn)行填充。這一步得到結(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()

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

HMAC.copy()

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

有一個地方很有意思,這個函數(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ù)簡單點來說就是用來比較a與b值是否相等的,當(dāng)將外部輸入的值與HMAC.degest()/HMAC.hexdigest()的輸出做比較時,有可能會遭到時序攻擊,所以可以通過調(diào)用這個函數(shù)比較值并防御可能存在的攻擊行為。Python3.3版本后新增。

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

總結(jié)

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

相關(guān)文章

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

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

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

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

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

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

    這篇文章主要介紹了Python通過正則庫爬取淘寶商品信息代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    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ù)點的最佳擬合,可能受到約束,本文主要介紹了如何使用Python實現(xiàn)指數(shù)和對數(shù)曲線擬合,需要的可以參考下
    2024-04-04
  • Python?Fire實現(xiàn)自動生成命令行接口

    Python?Fire實現(xiàn)自動生成命令行接口

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

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

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

    Python OpenCV圖像的位運算操作

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

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

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

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

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

最新評論

苍南县| 锡林浩特市| 盐源县| 定兴县| 武穴市| 罗定市| 习水县| 兴安县| 深圳市| 阜新市| 云林县| 陆良县| 苍南县| 靖州| 铜川市| 左贡县| 若尔盖县| 康乐县| 乐业县| 平舆县| 得荣县| 华容县| 福海县| 分宜县| 西乌珠穆沁旗| 孝感市| 古浪县| 九江县| 麻栗坡县| 沁水县| 灯塔市| 清徐县| 泗水县| 裕民县| 阿坝| 中西区| 长寿区| 昆明市| 武宣县| 沂水县| 九龙坡区|