Python中的哈希算法模塊hashlib詳解
hashlib模塊
hashlib 模塊實(shí)現(xiàn)了多種哈希算法,包括MD5以及SHA家族的算法,通過 algorithms_guaranteed 可以查看 hashlib 中封裝的所有算法
>>> from pprint import pprint >>> pprint(hashlib.algorithms_guaranteed) {'blake2b', 'blake2s', 'md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', 'sha512', 'shake_128', 'shake_256'}
整理如下
構(gòu)造器 | 算法 |
md5 | md5 |
sha家族 | sha1, sha224, sha256, sha384, sha512 |
sha3家族 | sha3_224, sha3_256, sha3_384, sha3_512, |
BLAKE2 | blake2b, blake2s |
shake | shake_128, shake_256 |
這些哈希算法擁有相同的外部接口,以 md5 為例,調(diào)用方式大致為
import hashlib x = hashlib.md5() x.update(b"tinycool") x.hexdigest() # '90cba0172a608c7d3784ba159e6a9ef1' x.digest() # b'\x90\xcb\xa0\x17*`\x8c}7\x84\xba\x15\x9ej\x9e\xf1'
其中, update 表示以二進(jìn)制字符串作為密鑰進(jìn)行哈希, digest 和 hexdigest 分別表示將生成的哈希碼通過二進(jìn)制和十六進(jìn)制的形式表現(xiàn)出來。
封裝算法簡(jiǎn)介
md5算法,MD即信息摘要(Message-Digest),md5可以理解為第五代信息摘要算法,于1992年公開,用以取代md4,但在2004年已經(jīng)被證實(shí)無法防止碰撞,從而不適用于安全性認(rèn)證,但目前來說還是有人在用。
相比之下,SHA,即安全散列算法(Secure Hash Algorithm),是美國(guó)政府的加密標(biāo)準(zhǔn),相對(duì)來說更加安全。其中sha1生成160bit長(zhǎng)度的信息摘要,其他SHA函數(shù),以sha224為例,224表示產(chǎn)生的信息摘要長(zhǎng)度為224bit,以此類推。
blake2b和blake2s分別針對(duì)64位操作系統(tǒng)和32位操作系統(tǒng)進(jìn)行優(yōu)化,以生成最長(zhǎng)64位和最長(zhǎng)32位的位數(shù)可變的信息摘要。
shake_128和shake_256可生成位數(shù)可變的信息摘要,二者的最大位數(shù)分別是128和256位。
new函數(shù)
通過 new 函數(shù),可以更加統(tǒng)一地生成哈希對(duì)象,例如
x = hashlib.new('sha256') x.update(b"tinycool") x.hexdigest() # '96d424d9d77972f28b5a11e8c2bddd67542e7784e01b7dcca51154babb2b54ea'
即 hashlib.new('xxx') 和 hashlib.xxx() 是相同的,當(dāng)然 xxx 得是 haslib 中封裝好的哈希函數(shù)。
接下來演示一下 shake_128 函數(shù)
x = hashlib.new('shake_128') x.update(b"tinycool") x.hexdigest(15) # '8f8f153833e5159d548f4371af9855' x.hexdigest(25) # '8f8f153833e5159d548f4371af9855e0affc9ddae8d6c98bee'
可見,在 hexdigest 中輸入不同的長(zhǎng)度,返回了不同長(zhǎng)度的十六進(jìn)制字符串。
通過 new 創(chuàng)建的哈希對(duì)象,有三個(gè)可調(diào)用的屬性
- digest_size 哈希對(duì)象的字節(jié)數(shù)。
- block_size 哈希算法內(nèi)部塊的字節(jié)數(shù)。
- name 哈希算法名字
到此這篇關(guān)于Python中的哈希算法模塊hashlib詳解的文章就介紹到這了,更多相關(guān)Python中的hashlib模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中集合的內(nèi)建函數(shù)和內(nèi)建方法學(xué)習(xí)教程
這篇文章主要介紹了Python中集合的內(nèi)建函數(shù)和內(nèi)建方法學(xué)習(xí)教程,包括工廠函數(shù)和僅用于可變集合的方法等知識(shí)點(diǎn),需要的朋友可以參考下2015-08-08Python Tornado 實(shí)現(xiàn)SSE服務(wù)端主動(dòng)推送方案
SSE是Server-Sent Events 的簡(jiǎn)稱,是一種服務(wù)器端到客戶端(瀏覽器)的單項(xiàng)消息推送,本文主要探索兩個(gè)方面的實(shí)踐一個(gè)是客戶端發(fā)送請(qǐng)求,服務(wù)端的返回是分多次進(jìn)行傳輸?shù)?直到傳輸完成,這種情況下請(qǐng)求結(jié)束后,考慮關(guān)閉SSE,所以這種連接可以認(rèn)為是暫時(shí)的,感興趣的朋友一起看看吧2024-01-01Python中字符串的基礎(chǔ)介紹及常用操作總結(jié)
字符串輸出格式與輸入的樣子相同,都是用撇號(hào)包裹,撇號(hào)和其它特殊字符用用反斜杠轉(zhuǎn)義。如果字符串中有單撇號(hào)而沒有雙撇號(hào)則用雙撇號(hào)包裹,否則應(yīng)該用單撇號(hào)包裹。后面要介紹的print語句可以不帶撇號(hào)或轉(zhuǎn)義輸出字符串2021-09-09Python 實(shí)現(xiàn)將numpy中的nan和inf,nan替換成對(duì)應(yīng)的均值
這篇文章主要介紹了Python 實(shí)現(xiàn)將numpy中的nan和inf,nan替換成對(duì)應(yīng)的均值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06關(guān)于jieba.cut與jieba.lcut的區(qū)別及說明
這篇文章主要介紹了關(guān)于jieba.cut與jieba.lcut的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05Python實(shí)現(xiàn)合并兩個(gè)列表的方法分析
這篇文章主要介紹了Python實(shí)現(xiàn)合并兩個(gè)列表的方法,結(jié)合實(shí)例形式對(duì)比分析了常見的Python列表合并操作技巧,需要的朋友可以參考下2018-05-05