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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

每周一个 Python 模块 | hashlib

發(fā)布時(shí)間:2024/4/14 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 每周一个 Python 模块 | hashlib 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

專(zhuān)欄地址:每周一個(gè) Python 模塊

hashlib 模塊定義了用于訪問(wèn)不同加密散列算法的 API。要使用特定的哈希算法,需要先用適當(dāng)?shù)臉?gòu)造函數(shù)或new()創(chuàng)建哈希對(duì)象。然后,無(wú)論使用何種算法,對(duì)象都使用相同的 API。

散列算法

由于hashlib 受 OpenSSL “支持”,因此該庫(kù)提供的所有算法都可用,包括:

  • MD5
  • SHA1
  • SHA224
  • SHA256
  • SHA384
  • SHA512

有些算法可用于所有平臺(tái),有些算法依賴于底層庫(kù)。對(duì)于每個(gè)列表,分別查看 algorithms_guaranteed 和algorithms_available 函數(shù)。

import hashlibprint('Guaranteed:\n{}\n'.format(', '.join(sorted(hashlib.algorithms_guaranteed)))) print('Available:\n{}'.format(', '.join(sorted(hashlib.algorithms_available))))# output # Guaranteed: # blake2b, blake2s, md5, sha1, sha224, sha256, sha384, sha3_224, # sha3_256, sha3_384, sha3_512, sha512, shake_128, shake_256 # # Available: # BLAKE2b512, BLAKE2s256, MD4, MD5, MD5 - SHA1, RIPEMD160, SHA1, # SHA224, SHA256, SHA384, SHA512, blake2b, blake2b512, blake2s, # blake2s256, md4, md5, md5 - sha1, ripemd160, sha1, sha224, sha256, # sha384, sha3_224, sha3_256, sha3_384, sha3_512, sha512, # shake_128, shake_256, whirlpool 復(fù)制代碼

樣本數(shù)據(jù)

本節(jié)中的所有示例都使用相同的示例數(shù)據(jù):

# hashlib_data.py import hashliblorem = '''Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.''' 復(fù)制代碼

MD5示例

要計(jì)算數(shù)據(jù)塊(此處為轉(zhuǎn)換為字節(jié)字符串的 unicode 字符串)的 MD5 哈希或摘要,首先創(chuàng)建哈希對(duì)象,然后添加數(shù)據(jù)并調(diào)用 digest() 或 hexdigest()。

import hashlibfrom hashlib_data import loremh = hashlib.md5() h.update(lorem.encode('utf-8')) print(h.hexdigest()) # 3f2fd2c9e25d60fb0fa5d593b802b7a8 復(fù)制代碼

此例使用 hexdigest() 方法而不是 digest(),因?yàn)檩敵鲆迅袷交?#xff0c;因此可以清晰地打印。如果二進(jìn)制摘要值可以接受,請(qǐng)使用digest()。

SHA1示例

SHA1 摘要以相同的方式計(jì)算。

import hashlibfrom hashlib_data import loremh = hashlib.sha1() h.update(lorem.encode('utf-8')) print(h.hexdigest()) # ea360b288b3dd178fe2625f55b2959bf1dba6eef 復(fù)制代碼

摘要值在此示例中是不同的,因?yàn)樗惴◤?MD5 更改為 SHA1。

按名稱(chēng)創(chuàng)建哈希

有時(shí),在字符串中按名稱(chēng)引用算法比通過(guò)直接使用構(gòu)造函數(shù)更方便。例如,將哈希類(lèi)型存儲(chǔ)在配置文件中。在這種情況下,用 new() 創(chuàng)建哈希對(duì)象。

# hashlib_new.py import argparse import hashlib import sysfrom hashlib_data import loremparser = argparse.ArgumentParser('hashlib demo') parser.add_argument('hash_name',choices=hashlib.algorithms_available,help='the name of the hash algorithm to use', ) parser.add_argument('data',nargs='?',default=lorem,help='the input data to hash, defaults to lorem ipsum', ) args = parser.parse_args()h = hashlib.new(args.hash_name) h.update(args.data.encode('utf-8')) print(h.hexdigest())# output # $ python3 hashlib_new.py sha1 # ea360b288b3dd178fe2625f55b2959bf1dba6eef # # $ python3 hashlib_new.py sha256 # # 3c887cc71c67949df29568119cc646f46b9cd2c2b39d456065646bc2fc09ffd8 # # $ python3 hashlib_new.py sha512 # # a7e53384eb9bb4251a19571450465d51809e0b7046101b87c4faef96b9bc904cf7f90 # 035f444952dfd9f6084eeee2457433f3ade614712f42f80960b2fca43ff # # $ python3 hashlib_new.py md5 # # 3f2fd2c9e25d60fb0fa5d593b802b7a8 復(fù)制代碼

增量更新

update() 可以重復(fù)調(diào)用哈希計(jì)算器的方法。每次,摘要都會(huì)根據(jù)輸入的附加文本進(jìn)行更新。逐步更新比將整個(gè)文件讀入內(nèi)存更有效,并產(chǎn)生相同的結(jié)果。

import hashlibfrom hashlib_data import loremh = hashlib.md5() h.update(lorem.encode('utf-8')) all_at_once = h.hexdigest()def chunkize(size, text):"Return parts of the text in size-based increments."start = 0while start < len(text):chunk = text[start:start + size]yield chunkstart += sizereturnh = hashlib.md5() for chunk in chunkize(64, lorem.encode('utf-8')):h.update(chunk) line_by_line = h.hexdigest()print('All at once :', all_at_once) # All at once : 3f2fd2c9e25d60fb0fa5d593b802b7a8 print('Line by line:', line_by_line) # Line by line: 3f2fd2c9e25d60fb0fa5d593b802b7a8 print('Same :', (all_at_once == line_by_line)) # Same : True 復(fù)制代碼

相關(guān)文檔:

pymotw.com/3/hashlib/i…

總結(jié)

以上是生活随笔為你收集整理的每周一个 Python 模块 | hashlib的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。