您好,登錄后才能下訂單哦!
1.hashlib密碼散列
hashlib模塊定義了一個API來訪問不同的密碼散列算法。要使用一個特定的散列算法,可以用適當(dāng)?shù)臉?gòu)造器函數(shù)或new()來創(chuàng)建一個散列對象。不論使用哪個具體的算法,這些對象都使用相同的API。
1.1 散列算法
由于hashlib有OpenSSL提供“底層支持”,所以O(shè)penSSL庫提供的所有算法都可用,包括:
有些算法在所有平臺上都可用,而有些則依賴于底層庫。這兩種算法分別由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示例
要為一個數(shù)據(jù)塊(在這里就是轉(zhuǎn)換為一個字節(jié)串的Unicode串)計算MD5散列或摘要,首先要創(chuàng)建散列對象,然后增加數(shù)據(jù),最后調(diào)用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()。
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算法不同。
1.4 增量更新
散列計算器的update()方法可以反復(fù)調(diào)用。每次調(diào)用時,都會根據(jù)提供的附加文本更新摘要。增量更新比將整個文件讀入內(nèi)存更高效,而且能生成相同的結(jié)果。
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))
這個例子展示了讀取或生成數(shù)據(jù)時如何以增量方式更新一個摘要。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。