1. 程式人生 > >Python3學習之路~5.12 hashlib & hmac & md5 & sha模組

Python3學習之路~5.12 hashlib & hmac & md5 & sha模組

hashlib模組用於加密相關的操作,3.x裡代替了md5模組和sha模組,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 演算法

import md5

hash = md5.new()
hash.update('Hello')
print hash.hexdigest()
md5-廢棄
import sha

hash = sha.new()
hash.update('Hello')
print hash.hexdigest()
sha-廢棄
import hashlib

# ######## md5 #########
hash = hashlib.md5()
hash.update(b"Hello")
hash.update(b"It's me")
print(hash.digest()) # b']\xde\xb4{/\x92Z\xd0\xbf$\x9cR\xe3Br\x8a' 二進位制資料字串
print(hash.hexdigest()) # 5ddeb47b2f925ad0bf249c52e342728a 16進位制格式hash,明文為“HelloIt's me”
print(len(hash.hexdigest())) #
32 hash2 = hashlib.md5() hash2.update('你好'.encode(encoding='utf-8')) print(hash2.hexdigest()) # 7eca689f0d3389d9dea66ae112e5cfd7 # ######## sha1 ######### hash =hashlib.sha1() hash.update(b'Hello') print(hash.hexdigest()) # f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0 # ######## sha256 ######## hash = hashlib.sha256() hash.update(b
'Hello') print(hash.hexdigest()) # ######## sha384 ######## hash = hashlib.sha384() hash.update(b'Hello') print(hash.hexdigest()) # ######## sha512 ######## hash = hashlib.sha512() hash.update(b'Hello') print(hash.hexdigest())
hashlib模組使用

以上加密演算法雖然依然非常厲害,但存在缺陷,即:通過撞庫可以反解。所以,有必要對加密演算法中新增自定義key再來做加密。

import hashlib

hash = hashlib.md5(b'898oaFs09f') # key即898oaFs09f
hash.update(b'Hello') # 明文為Hello
print(hash.hexdigest())

還不夠吊?python 還有一個 hmac 模組,它內部對我們建立 key 和 內容 再進行處理然後再加密

雜湊訊息鑑別碼,簡稱HMAC,是一種基於訊息鑑別碼MAC(Message Authentication Code)的鑑別機制。
使用HMAC時,訊息通訊的雙方,通過驗證訊息中加入的鑑別金鑰K來鑑別訊息的真偽;
一般用於網路通訊中訊息加密,前提是雙方先要約定好key,就像接頭暗號一樣,然後訊息傳送把用key把訊息加密,接收方用key + 訊息明文再加密,拿加密後的值 跟 傳送者的相對比是否相等,這樣就能驗證訊息的真實性,及傳送者的合法性了。

import hmac

h = hmac.new(b'mykey',msg=b'Hello world')
print(h.hexdigest()) # 807f6a8c01dcf0d82eda2dd704291c78

h = hmac.new(b'mykey',msg='你好'.encode(encoding='UTF-8'))
print(h.hexdigest()) # 0fc9eba32da88e49cefa687b7e6d6927

h = hmac.new(b"mykey") # key = 'mykey'
h.update(b'Hello world') # msg='Hello world')
print(h.hexdigest()) # 807f6a8c01dcf0d82eda2dd704291c78
hmac模組使用

更多關於md5,sha1,sha256等介紹的文章看這裡https://www.tbs-certificates.co.uk/FAQ/en/sha256.html