python—hashlib模組使用詳解

碼農47發表於2017-10-25

  這個模組實現了一個通用的介面來實現多個不同的安全雜湊和訊息摘要演算法。包括FIPS安全雜湊演算法SHA1,SHA224,SHA256,SHA384和SHA512(在FIPS 180-2中定義)以及RSA的MD5演算法(在因特網 RFC 1321術語“安全雜湊”和“訊息摘要”是可互換的。較舊的演算法被稱為訊息摘要。現代術語是安全雜湊。

 

  每種型別的雜湊都具有一個命名建構函式(此模組中始終存在的雜湊演算法的建構函式為md5()sha1()sha224()sha256()sha384()sha512())。可以使用update()方法以類位元組物件填充這個物件(通常為位元組)。在連線資料的任何時候,都可以使digest()hexdigest()方法來向它請求摘要。

  例一(計算一串資料的MD5):

 1 import hashlib
 2 
 3 str1 = b"hello "
 4 str2 = b"world"
 5 str3 = b"hello world"
 6 
 7 m1 = hashlib.md5()             #生成一個md5物件
 8 m1.update(str1)                #以bytes型別填充md5物件
 9 m1.update(str2)
10 m2 = hashlib.md5()
11 m2.update(str3)
12 
13 #digest()返回傳遞給update()方法的資料的摘要。它是一個大小為digest_size的位元組物件,包含的位元組可以在0到255整個範圍。
14 print("m1 hexdigest: ", m1.digest())
15 print("m2 hexdigest: ", m2.digest())
16 #hexdigest()類似digest(),但是摘要以2倍長度的字串物件返回,只包含十六進位制數字。這可用於在電子郵件或其它非二進位制環境中安全交換資料。
17 print("m1 hexdigest: ", m1.hexdigest())
18 print("m2 hexdigest: ", m2.hexdigest())
19 
20 
21 
22 
23 
24 >>>:
25 m1 hexdigest:  b`^xb6;xbbxe0x1exeexd0x93xcb"xbbx8fZxcdxc3`
26 m2 hexdigest:  b`^xb6;xbbxe0x1exeexd0x93xcb"xbbx8fZxcdxc3`
27 m1 hexdigest:  5eb63bbbe01eeed093cb22bb8f5acdc3
28 m2 hexdigest:  5eb63bbbe01eeed093cb22bb8f5acdc3

View Code

   注:可以發現,只要資料一樣(格式不同),則MD5碼相同(即update()是以原來的基礎繼續生成MD5碼,而不是新內容覆蓋舊內容)。

  只需更改建構函式即可使用不同的安全雜湊演算法,其呼叫方式與上面的完全一樣。

 

  對於一次性資料,有中更精煉的寫法,示例如下(其餘演算法一樣):

1 md5 = hashlib.md5(b`hello world`)
2 print(md5.hexdigest())

 

  hashlib.new(name[, data])

是一個通用建構函式,它接受所需演算法的字串名稱作為其第一個引數。它也存在允許訪問上面列出的雜湊以及您的OpenSSL庫可能提供的任何其他演算法。命名的建構函式比new()快得多,應該是首選。

使用OpenSSL提供的演算法使用new()

1 h = hashlib.new(`ripemd160`)
2 h.update(b"hello world")
3 print(h.hexdigest())

View Code

 


相關文章