用于加密相關(guān)的操作,python 3.x里代替了md5模塊和sha模塊,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
md5
md5 字符串只可以單向加密成密文,不能反解。(可通過撞庫進(jìn)行解密)
如果用于登錄密碼驗(yàn)證,則可以將密碼轉(zhuǎn)換為密文進(jìn)行比對驗(yàn)證即可
obj = hashlib.md5() #調(diào)用md5消息摘要算法
obj.update('test message'.encode('utf-8')) #對指定的字符串進(jìn)行加密,加密長度為32位的字節(jié)形式
print(obj.hexdigest())
# c72b9698fa1927e1dd12d3cf26ed84b2 每個(gè)字符串都有唯一值
obj.update('try'.encode('utf-8'))
#3a2430952b0188616a70607cce878631 ==> 等價(jià)于對 'test message'+'try' 加密
print(obj.hexdigest())
所以可以通過給用戶定義的字符串‘加鹽’key來增加密文的復(fù)雜度
obj1 = hashlib.md5('password'.encode('utf-8')) `
#調(diào)用md5消息摘要算法,并在該處指定用其他字符串來輔助加密 ‘加鹽’
obj1.update('test message'.encode('utf-8'))
print(obj1.hexdigest()) # c13bbb52245a85ec55bedfb309a4bfb1
以上加密算法雖然依然非常厲害,但是存在缺陷
即:通過撞庫(哈希碰撞)可以反解。
所以為增加安全級(jí)別可以使用‘加鹽’方式
SHA256
import hashlib
hash = hashlib.sha256('898oaFs09f'.encode('utf8'))
hash.update('alvin'.encode('utf8'))
print (hash.hexdigest())#e79e68f070cdedcfe63eaf1a2e92c83b4cfb1b5c6bc452d214c1b7e77cdfd1c7
python 還有一個(gè) hmac 模塊,它內(nèi)部對我們創(chuàng)建 key 和 內(nèi)容 再進(jìn)行處理然后再加密
import hmac
h = hmac.new('alvin'.encode('utf8'))
h.update('hello'.encode('utf8'))
print (h.hexdigest())#320df9832eab4c038b6c1d7ed73a5940