91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python3 hashlib密碼散列算法原理詳解

發布時間:2020-09-22 03:29:48 來源:腳本之家 閱讀:134 作者:愛編程的小灰灰 欄目:開發技術

1.hashlib密碼散列

hashlib模塊定義了一個API來訪問不同的密碼散列算法。要使用一個特定的散列算法,可以用適當的構造器函數或new()來創建一個散列對象。不論使用哪個具體的算法,這些對象都使用相同的API。

1.1 散列算法

由于hashlib有OpenSSL提供“底層支持”,所以OpenSSL庫提供的所有算法都可用,包括:

  • md5
  • sha1
  • sha224
  • sha256
  • sha384
  • sha512

有些算法在所有平臺上都可用,而有些則依賴于底層庫。這兩種算法分別由algorithms_guaranteed和algorithms_available提供。

import hashlib
print('Guaranteed:\n{}\n'.format(
  ', '.join(sorted(hashlib.algorithms_guaranteed))))
print('Available:\n{}'.format(
  ', '.join(sorted(hashlib.algorithms_available))))

Guaranteed:
blake2b, blake2s, md5, sha1, sha224, sha256, sha384, sha3_224, sha3_256, sha3_384, sha3_512, sha512, shake_128, shake_256
Available:
DSA, DSA-SHA, MD4, MD5, RIPEMD160, SHA, SHA1, SHA224, SHA256, SHA384, SHA512, blake2b, blake2s, dsaEncryption, dsaWithSHA, ecdsa-with-SHA1, md4, md5, ripemd160, sha, sha1, sha224, sha256, sha384, sha3_224, sha3_256, sha3_384, sha3_512, sha512, shake_128, shake_256, whirlpool

1.2 MD5示例

要為一個數據塊(在這里就是轉換為一個字節串的Unicode串)計算MD5散列或摘要,首先要創建散列對象,然后增加數據,最后調用digest()或hexdigest()。

import hashlib
lorem = '''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.'''
h = hashlib.md5()
h.update(lorem.encode('utf-8'))
print(h.hexdigest())

這個例子使用了hexdigest()方法而不是digest(),因為要格式化輸出以便清楚的打印。如果可以接受二進制摘要值,那么可以使用digest()。

Python3 hashlib密碼散列算法原理詳解

1.3 SHA1示例

SHA1摘要也用同樣的方式計算。

import hashlib
lorem = '''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.'''
h = hashlib.sha1()
h.update(lorem.encode('utf-8'))
print(h.hexdigest())

這個例子中的摘要值有所不同,因為MD5和SHA1算法不同。

Python3 hashlib密碼散列算法原理詳解

1.4 增量更新

散列計算器的update()方法可以反復調用。每次調用時,都會根據提供的附加文本更新摘要。增量更新比將整個文件讀入內存更高效,而且能生成相同的結果。

import hashlib
lorem = '''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.'''
h = 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 = 0
  while start < len(text):
    chunk = text[start:start + size]
    yield chunk
    start += size
  return
h = 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)
print('Line by line:', line_by_line)
print('Same    :', (all_at_once == line_by_line))

這個例子展示了讀取或生成數據時如何以增量方式更新一個摘要。

Python3 hashlib密碼散列算法原理詳解

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

迭部县| 昭平县| 蚌埠市| 望江县| 乐山市| 大厂| 同仁县| 安平县| 鄄城县| 抚远县| 沐川县| 巴彦淖尔市| 青铜峡市| 信阳市| 讷河市| 新疆| 崇州市| 桐庐县| 措美县| 信阳市| 禄丰县| 孟津县| 大化| 常山县| 贵德县| 乐安县| 文昌市| 米易县| 博野县| 卢龙县| 三原县| 洛南县| 武威市| 峨眉山市| 鄂州市| 华蓥市| 宁化县| 龙游县| 余江县| 金塔县| 绥江县|