Python 的 md5 和 sha1 加密---hashlib
阿新 • • 發佈:2018-12-15
Python 的 md5 和 sha1 加密—hashlib
md5 與 sha1
MD5的全稱是Message-Digest Algorithm 5(資訊-摘要演算法)
。128位長度。目前MD5是一種不可逆演算法。具有很高的安全性。它對應任何字串都可以加密成一段唯一的固定長度的程式碼。
md5的應用場景:
- 加密網站註冊使用者的密碼。(但去年的各大網站密碼洩漏事件確實讓人蛋疼……)
- 網站使用者上傳圖片 / 檔案後,計算出 MD5 值作為檔名。(MD5可以保證唯一性)
- key-value資料庫中使用MD5值作為key。
- 比較兩個檔案是否相同。(大家在下載一些資源的時候,就會發現網站提供了MD5值,就是用來檢測檔案是否被篡改)
SHA1的全稱是Secure Hash Algorithm(安全雜湊演算法)
。SHA1基於MD5,加密後的資料長度更長,它對長度小於264的輸入,產生長度為160 bit的雜湊值。比MD5多32位。因此,比MD5更加安全,但SHA1的運算速度就比 MD5 要慢了。
import hashlib
text = 'This is a md5 text.'
text_md5 = hashlib.md5(text.encode('utf-8'))
text_md5.hexdigest()
'3343b9dffc0efbab68a57bba3f419a1b'
text_sha1 = hashlib. sha1(text.encode('utf-8'))
text_sha1.hexdigest()
'd76e2c3830efabb6c7986d9c71fcc040bfae5d6e'
# 或者採用如下的方式進行雜湊
m = hashlib.md5()
m.update(text.encode('utf-8'))
m.hexdigest()
'3343b9dffc0efbab68a57bba3f419a1b'
大檔案的雜湊雜湊
上面說過可以用MD5來檢測兩個檔案是否相同,但想想,如果是兩個很大的檔案,擔心記憶體不夠用,這時怎麼辦?
這就要使用update
方法了。程式碼如下:
def gen_md5 (f):
f_md5 = hashlib.md5()
while True:
data = f.read(1024)
if not data:
break
f_md5.update(data)
return f_md5.hexdigest()
一個更 Python 風格的實現:
def md5(fname):
hash_md5 = hashlib.md5()
with open(fname, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
hash_md5.update(chunk)
return hash_md5.hexdigest()