python模塊之hashlib

hashlib模塊實現了多種安全哈希和信息摘要算法的通用接口,包括FIPS中定義的SHA1, SHA224, SHA256, SHA384, SHA512以及RFC 1321中定義的MD5

注意點:
1. adler32及crc32哈希由zlib模塊提供
2. 某些算法已知存在哈希碰撞弱點

哈希算法

每個hash算法都有一個同名的構造函數,并返回擁有相同接口的hash對象

sha1(), sha224(), sha256(), sha384(), sha512(), blake2b()以及blake2s()這些構造函數在hashlib模塊中總是可用。md5()通常也可用,但在某些罕見的python版本(“FIPS compliant” build of Python)中例外。取決于所用平臺上python使用的OpenSSL,hashlib也支持某些額外的算法,在大多數平臺上,sha3_224(), sha3_256(), sha3_384(), sha3_512(), shake_128(), shake_256()都是可用的。

>>> import hashlib
>>> m = hashlib.sha256()
>>> m.update(b"Nobody inspects")
>>> m.update(b" the spammish repetition")
>>> m.digest()
b'\x03\x1e\xdd}Ae\x15\x93\xc5\xfe\\\x00o\xa5u+7\xfd\xdf\xf7\xbcN\x84:\xa6\xaf\x0c\x95\x0fK\x94\x06'

或者更精簡的方式:

>>> hashlib.sha256(b"Nobody inspects the spammish repetition").digest()
b'\x03\x1e\xdd}Ae\x15\x93\xc5\xfe\\\x00o\xa5u+7\xfd\xdf\xf7\xbcN\x84:\xa6\xaf\x0c\x95\x0fK\x94\x06'

hashlib.new(name[, data])

通用構造函數,name參數表示要使用的hash算法的名稱,可以是上述列出的所有hash算法以及OpenSSL庫支持的其他算法。使用算法名稱構造函數較使用new()更快

>>> h = hashlib.new("sha256", b"Nobody inspects the spammish repetition")
>>> h.digest()
b'\x03\x1e\xdd}Ae\x15\x93\xc5\xfe\\\x00o\xa5u+7\xfd\xdf\xf7\xbcN\x84:\xa6\xaf\x0c\x95\x0fK\x94\x06'

hashlib.algorithms_guaranteed

所有平臺的hashlib模塊都支持的hash算法的名稱集合。md5也在此集合中(Note that ‘md5’ is in this list despite some upstream vendors offering an odd “FIPS compliant” Python build that excludes it.)。

hashlib.algorithms_available

當前運行的python解釋器支持的hash算法的名稱集合,在new()構造函數中使用都能被正確識別。同一算法可能以不同名稱出現多次。
hashlib.algorithms_guaranteed的結果集總是hashlib.algorithms_available結果集的子集

hash.digest_size

hash對象的字節長度

hash.block_size

hash對象的內部塊大小

hash.name

hash對象的名稱

hash.update(data)

傳遞類字節參數(通常是bytes)更新hash對象。重復調用update()等同于單次的拼接調用:m.update(a); m.update(b)等同m.update(a+b)

從python3.1開始,為了更好的多線程性能,使用OpenSSL支持的hash算法且處理數據量大于2047個字節的update(或創建)操作發生時,將釋放python全局解釋器鎖允許其他線程運行

hash.digest()

截止此方法調用時,update()已接收的數據的摘要,是一個可包含0到255之間所有字節的字節對象

hash.hexdigest()

類似于digest(),不過是以雙倍長度的只包含十六進制數字的字符串對象返回摘要值。

hash.copy()

返回hash對象的克隆

SHAKE算法的可變長度摘要

The shake_128() and shake_256() algorithms provide variable length digests with length_in_bits//2 up to 128 or 256 bits of security

shake.digest(length)

同hash.digest()

shake.hexdigest(length)

同hash.hexdigest()

密鑰導出

密鑰導出和擴展算法是為安全密碼散列設計的。類似sha1(password)這種簡單算法不能有效抵御暴力破解,一個好的密碼散列函數必須是可調節的,耗時的,并包含鹽

hashlib.pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None)

pbkdf2_hmac()提供了使用PKCS#5填充的pbkdf2算法,使用HMAC作為偽隨機函數。

hash_name表示HMAC的哈希摘要算法的名稱,比如"sha1"或"sha256"。

passwordsalt是類字節對象,password長度應該限制在一個合理范圍之間,salt長度應該在16個字節以上且來源恰當。

iterations表示迭代次數,基于hash算法以及機器計算能力設置。截止2013年,sha256算法建議最少進行10萬次迭代

dklen表示導出密鑰的長度。默認值為None,使用hash_name算法計算的hash對象的digest_size屬性長度

>>> import hashlib, binascii
>>> dk = hashlib.pbkdf2_hmac('sha256', b'password', b'salt', 100000)
>>> binascii.hexlify(dk)
b'0394a2ede332c9a13eb82e9b24631604c31df978b4e2f0fbd2c549944f9d79a5'

Note: A fast implementation of pbkdf2_hmac is available with OpenSSL. The Python implementation uses an inline version of hmac. It is about three times slower and doesn’t release the GIL.

hashlib.scrypt(password, *, salt, n, r, p, maxmem=0, dklen=64)

The function provides scrypt password-based key derivation function as defined in RFC 7914.

passwordsalt是類字節對象,password長度應該限制在一個合理范圍之間,salt長度應該在16個字節以上且來源恰當。

n is the CPU/Memory cost factor, r the block size, p parallelization factor and maxmem limits memory (OpenSSL 1.1.0 defaults to 32 MiB). dklen is the length of the derived key.

BLAKE2

待補充...實在是編不下去了,對加密算法相關的知識太缺乏了

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281974.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281974.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281974.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

記一次阿里電面經歷

昨天下午(3/19)三點多鐘,接到了一個杭州的電話,是阿里的。問我是否方便聊聊。我說我在上課,四點下課。然后他就四點多鐘的時候又打了一次過來。項目經歷上來就問我有無大型項目的經歷。不好意思,我說無。。…

C語言程序設計第三次作業

(一)改錯題 計算f(x)的值:輸入實數x,計算并輸出下列分段函數f(x)的值,輸出時保留1位小數。 輸入輸出樣例1:   Enterr x: 10.0   f(10.0) 0.1 輸入輸出樣例2:   Enter x: 234   f(234.0…

mysql數據庫項目化教程鄭小蓉_MySQL數據庫項目化教程(高等職業教育“十三五”規劃教材(軟件技術專業))...

《MySQL數據庫項目化教程/高等職業教育十三五規劃教材(軟件技術專業)》是一本介紹MySQL數據庫基礎知識的入門教材,采用項目驅動方式循序漸進地介紹MySQL各個模塊的知識。主要內容包括:Windows下MySQL的安裝,MySQL服務的啟動與停止&#xff0c…

WPF-09 ManualResetEventSlim信號量

業務場景如下:WPF應用程序后臺有個定時任務在接收PLC硬件數據(該線程接收完數據之后, 會重新啟動一個新線程繼續接收.....),當應用程序關閉時, 我們得確保接收PLC硬件數據的線程完成之后,再關閉應用程序,否則會造成數據丟失。上面的業務場景是…

【bzoj3033】太鼓達人 DFS歐拉圖

題目描述 給出一個整數K,求一個最大的M,使得存在一個每個位置都是0或1的圈,圈上所有連續K位構成的二進制數兩兩不同。輸出最大的M以及這種情況下字典序最小的方案。 輸入 一個整數K。 輸出 一個整數M和一個二進制串,由一個空格分隔…

Redis 集合處理

學習了列表之后,發現了Redis處理字符串的功能強大。 為了適應不同場景的需求,還有一個用的很多的就是集合。 Redis提供的集合支持的類型是字符串。并且集合中的元素值是唯一的,也就是說不能出現重復數據。 而且,集合的實現是通過哈…

fpga mysql_FPGA的一些瑣碎知識整理

1.生產FPGA的廠家有:ALTERAXILINXATCELLatticeps:Altera和Xilinx主要生產一般用途FPGA,其主要產品采用SRAM工藝Actel主要提供非易失性FPGA,產品主要基于反熔絲工藝和FLASH工藝ps: 熔絲,顧名思義:把絲熔掉,反…

使用增量備份修復DG中的GAP

問題描述 oracle中DG出現主備不同步現象,alert日志報警有gap信息,但是v$archive_gap視圖查不到任何信息。同時主庫上的對應歸檔已經刪除且沒有備份 解決方案 1.查詢備庫的scn SQL> select current_scn from v$database; 這時有可能出來的scn是以科學計…

C# 反射類Assembly用法舉例

概述程序運行時,通過反射可以得到其它程序集或者自己程序集代碼的各種信息,包括類、函數、變量等來實例化它們,執行它們,操作它們,實際上就是獲取程序在內存中的映像,然后基于這個映像進行各種操作。Assemb…

團隊作業

團隊&組員: 沒有組名,大概是因為我們組雖然有10個人,但是好像只起到人多的地方就容易開車搞笑,沒有內涵,取出來的都是秋名山吳彥組這樣的開車組名,在大家的的強烈建議和玩笑中,決定了沒有組…

算法系列【希爾排序】篇

常見的內部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數排序等。用一張圖概括:關于時間復雜度:1. 平方階 (O(n2)) 排序各類簡單排序:直接插入、直接選擇和冒泡排序。2. 線性對數…

sql查詢索引語句_sql優化總結--基于sql語句優化和索引優化

概述最近做查詢,統計和匯總。由于數據量比較龐大,大部分表數據上百萬,甚至有的表數據上千萬。所以在系統中做sql優化比較多,特此寫一篇文章總結一下關于sql優化方面的經驗。導致查詢緩慢的原因1、數據量過大2、表設計不合理3、sql…

電商行業運維實踐

電商行業運維實踐--------------------…

數據結構小總結(成都磨子橋技工學校數據結構前12題)

[pixiv] https://www.pixiv.net/member_illust.php?modemedium&illust_id34352147 暑假的作業,頹頹的我總算是寫完了 線段樹 線段樹是一個高級玩意,不僅可以求區間和,區間最大等等的簡單問題,靈活運用還有好多變種。自從學…

【九章算法免費講座第一期】轉專業找CS工作的“打狗棒法”

講座時間: 美西時間6月5日18:30-20:00(周五) 北京時間6月6日09:30-11:00(周六a.m) 講座安排: 免費在線直播講座 報名網址: http://t.cn/R2XgMSH&a…

golang mysql 防注入_Go,Gorm 和 Mysql 是如何防止 SQL 注入的

Go,Gorm 和 Mysql 是如何防止 SQL 注入的SQL 注入和 SQL 預編譯技術什么是 SQL 注入所謂SQL注入(sql inject),就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。具體來說&#xff…

wav2midi 音樂旋律提取算法 附可執行demo

前面提及過,音頻指紋算法的思路。 也梳理開源了兩個比較經典的算法。 https://github.com/cpuimage/shazam https://github.com/cpuimage/AudioFingerprinter 后來一段時間,稍微看了下這兩個算法,還有不少可以精簡優化的空間。 例如抗噪&…

全新升級的AOP框架Dora.Interception[5]: 實現任意的攔截器注冊方式

Dora.Interception提供了兩種攔截器注冊方式,一種是利用標注在目標類型、屬性和方法上的InterceptorAttribute特性,另一種采用基于目標方法或者屬性的調用表達式。通過提供的擴展點,我們可以任何我們希望的攔截器注冊方式。目錄一、IIntercep…

SCAU 算法課的題

8594 有重復元素的排列問題(優先做) 時間限制:1000MS 內存限制:1000K提交次數:1610 通過次數:656 題型: 編程題 語言: G;GCC;VC Description 設集合R{r1,r2,...,rn}是要進行排列的n個元素,其中r1,r2,...,rn可能相同。 試著設計一個算法&am…

react 數組新增_React 新特性 Hooks 講解及實例(二)

本文是 React 新特性系列的第二篇,第一篇請點擊這里:React 新特性講解及實例什么是 HooksHook 是 React 16.8 的新增特性。它可以讓你在不編寫 類組件 的情況下使用 state以及其他的 React 特性。類組件的不足狀態邏輯復用難缺少復用機制渲染屬性和高階組…