鍍金池/ 教程/ Python/ hashlib
基礎(chǔ)
itertools
HTTP 服務(wù)
hashlib
閉包
文件和目錄
單元測試
使用 @property
標(biāo)準(zhǔn)模塊
陌生的 metaclass
Base64
進(jìn)程、線程和協(xié)程
讀寫二進(jìn)制文件
匿名函數(shù)
輸入和輸出
Click
元組
字符編碼
partial 函數(shù)
參考資料
collections
協(xié)程
類和實例
Python 之旅
定制類和魔法方法
常用數(shù)據(jù)類型
繼承和多態(tài)
ThreadLocal
HTTP 協(xié)議簡介
Requests 庫的使用
讀寫文本文件
列表
os 模塊
迭代器 (Iterator)
正則表達(dá)式
集合
上下文管理器
異常處理
你不知道的 super
定義函數(shù)
datetime
資源推薦
字典
slots 魔法
hmac
第三方模塊
進(jìn)程
類方法和靜態(tài)方法
函數(shù)參數(shù)
高階函數(shù)
函數(shù)
re 模塊
高級特性
線程
argparse
生成器
結(jié)束語
字符串
map/reduce/filter
函數(shù)式編程
Celery
裝飾器

hashlib

Python 內(nèi)置的 hashlib 模塊提供了常見的摘要算法(或稱哈希算法,散列算法),如 MD5,SHA1, SHA256 等。摘要算法的基本原理是:將數(shù)據(jù)(如一段文字)運算變?yōu)榱硪还潭ㄩL度值

MD5 (Message-Digest Algorithm 5, 消息摘要算法),是一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個 128 位(16 字節(jié))的散列值(hash value),用于確保信息傳輸完整一致。

SHA1 (Secure Hash Algorithm, 安全哈希算法) 是 SHA 家族的其中一個算法,它經(jīng)常被用作數(shù)字簽名。

MD5

hashlib 模塊提供了 md5 函數(shù),我們可以很方便地使用它:

>>> import hashlib
>>>
>>> m = hashlib.md5('md5 test in Python!')
>>> m.digest()
'\xad\xc0\x99\x01\x12\xc7&\xb5~\xb0\xaf \x974\x11\xab'
>>> m.hexdigest()   # 使用一個 32 位的 16 進(jìn)制字符串表示
'adc0990112c726b57eb0af20973411ab'

上面,我們是直接把數(shù)據(jù)傳入 md5() 函數(shù),我們也可以通過一次或多次使用 update 來實現(xiàn):

>>> import hashlib
>>> m = hashlib.md5()
>>> m.update('md5 test ')
>>> m.update('in Python!')
>>> m.hexdigest()
'adc0990112c726b57eb0af20973411ab'

SHA1

SHA1 的使用和 MD5 的使用類似:

>>> import hashlib
>>>
>>> sha1 = hashlib.sha1()
>>> sha1.update('md5 test ')
>>> sha1.update('in Python!')
>>> sha1.hexdigest()
'698a8b18d5f99a140520475c342af455183c58a3'

小結(jié)

  • MD5 以前經(jīng)常用來做用戶密碼的存儲。2004年,它被證明無法防止碰撞,因此無法適用于安全性認(rèn)證,但仍廣泛應(yīng)用于普通數(shù)據(jù)的錯誤檢查領(lǐng)域。如果你需要儲存用戶密碼,你應(yīng)該去了解一下諸如 PBKDF2bcrypt 之類的算法。而 SHA1 則經(jīng)常用作數(shù)字簽名。

參考資料

上一篇:類和實例下一篇:高級特性