日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python模块之hashlib

發布時間:2023/12/6 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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"。

password和salt是類字節對象,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.

password和salt是類字節對象,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

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

總結

以上是生活随笔為你收集整理的python模块之hashlib的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。