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

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

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再來作加密。python

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 網絡

 

補充:base64模塊ide

不少互聯網請求的消息頭傳送字段值時都會對其進行加密。通常是先計算MD5加密的32位字符串(或者二進制數組(128位)),而後再對其進行base64編碼,以Python3爲例,代碼以下:編碼

import hashlib,base64
a =hashlib.md5()
a.update("0123456789".encode())
print("MD5加密後的32位字符串:",a.hexdigest())
print("base64編碼1",base64.b64encode(a.hexdigest().encode()))
print("MD5加密後的二進制數組(128位):",a.digest())
print("base64編碼2",base64.b64encode(a.digest()))

輸出以下:加密

MD5加密後的32位字符串: 781e5e245d69b566979b86e28d23f2c7
base64編碼1 b'NzgxZTVlMjQ1ZDY5YjU2Njk3OWI4NmUyOGQyM2YyYzc='
MD5加密後的二進制數組(128位): b'x\x1e^$]i\xb5f\x97\x9b\x86\xe2\x8d#\xf2\xc7'
base64編碼2 b'eB5eJF1ptWaXm4bijSPyxw=='spa

相關文章
相關標籤/搜索