hashlib模塊
用於加密相關的操作,3.X裏代替了md5模塊和sha模塊,主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法
(sha比md5 更復雜、md5 不能反解)
具體應用:用於網站防篡改。具體方法:監控網站被篡改,定時的去wget 去下載,然後md5比對 ,檢查網站是否被篡改。
如何驗證md5 呢, 就是在生成一次md5值 比較是否相同。
具體使用方法:
#導入模塊
import hashlib
生成一個加密的對象並複製給變量
m = hashlib.md5()
給對象輸入加密bytes字符類型
m.update(b"hello")
m.update(b"it's me")
打印加密後的md5值,輸出二進制hash
print(m.digest())
打印加密後的md5值,輸出十六進制格式hash
print(m.hexdigest())
查看十六進制格式hash的長度爲32
print(len(m.hexdigest()))
以下是六種加密方法一一示例:
# SHA1加密
sha = hashlib.sha1()
sha.update("管理員".encode(encoding="utf-8"))
print(sha.hexdigest())
# SHA224加密
sha224 = hashlib.sha224()
sha224.update(b"admin")
print(sha224.hexdigest())
# SHA256加密
sha256 = hashlib.sha256()
sha256.update(b"admin")
print(sha256.hexdigest())
# SHA384加密
sha384 = hashlib.sha384()
sha384.update(b"admin")
print(sha384.hexdigest())
# SHA512加密
sha512 = hashlib.sha512()
sha512.update(b"admin")
print(sha512.hexdigest())
# MD5加密
md5 = hashlib.md5()
md5.update(b"admin")
print(md5.hexdigest())
hmac模塊
python還有一個hmac模塊,它內部對我們創建key和內容 再進行處理 再加密!
散列消息鑑別碼,簡稱HMAC,是一種基於消息鑑別碼MAC(Message Authentication Code)的鑑別機制。使用HMAC時,消息通訊的雙方,通過驗證消息中加入的鑑別密鑰K來鑑別消息的真僞;
一般用於網絡通信中消息加密,前提是雙方先要約定好key,就像接頭暗號一樣,然後消息發送,用key把消息加密,接收方用key + 消息明文再加密,拿加密後的值 跟 發送者的相對比是否相等,這樣就能驗證消息的真實性,及發送者的合法性了。
算法表示:
算法公式 : HMAC(K,M)=H(K⊕opad∣H(K⊕ipad∣M))[1]
H 代表所採用的HASH算法(如SHA-256)
K 代表認證密碼
Ko 代表HASH算法的密文
M 代表一個消息輸入
B 代表H中所處理的塊大小,這個大小是處理塊大小,而不是輸出hash的大小
如,SHA-1和SHA-256 B = 64
SHA-384和SHA-512 B = 128
L 表示hash的大小
Opad 用0x5c重複B次
Ipad 用0x36重複B次
Apad 用0x878FE1F3重複(L/4)次
認證流程
(1) 先由客戶端向服務器發出一個驗證請求。
(2) 服務器接到此請求後生成一個隨機數並通過網絡傳輸給客戶端(此爲挑戰)。
(3) 客戶端將收到的隨機數提供給ePass,由ePass使用該隨機數與存儲在ePass中的密鑰進行HMAC-MD5運算並得到一個結果作爲認證證據傳給服務器(此爲響應)。
(4) 與此同時,服務器也使用該隨機數與存儲在服務器數據庫中的該客戶密鑰進行HMAC-MD5運算,如果服務器的運算結果與客戶端傳回的響應結果相同,則認爲客戶端是一個合法用戶。
具體使用方法:
#導入模塊
import hmac
#設置密碼和消息 進行加密
h = hmac.new("哈哈哈".encode(encoding="utf-8"),"你好".encode(encoding="utf-8"))
#打印加密後的字符
print(h.hexdigest())
更多關於md5,sha1,sha256等介紹的文章看這裏https://www.tbs-certificates.co.uk/FAQ/en/sha256.html