1. 程式人生 > >Python 的 md5 和 sha1 加密---hashlib

Python 的 md5 和 sha1 加密---hashlib

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()