Python學習——hashlib模組
一、概述
在程式開發過程中,很多時候會涉及使用者資訊驗證環節,這類場景下我們往往需要對字串進行加密處理。python中也有專門的加密模組,它就是hashlib。下面章節將詳述它的常見用法。
二、常見加密演算法的使用
hashlib模組支援業界主流常見的一些加密演算法,如md5,sha1,sha256,sha384,sha 512,hmac加密等,具體用法都差不多,只是呼叫的演算法不同而已。需要注意的是,在輸入需要被加密的字串時,必須先encode等二進位制串,所以在字串前面要加上b。
2.1 md5加密
直接上程式碼把,沒有太多可以講述的了。
import hashlib
m = hashlib.md5() #建立一個md5物件,即通過md5加密處理
m.update(b'python') #此處傳遞的字串需要encode成二進位制,前面加b
print(m.hexdigest()) #以16進位制輸出
輸出:
23eeeb4347bdd26bfc6b7ee9a3b755dd
注意:
這裡的update有點類似於append的作用,當我們連續兩次update後輸出時,最後輸出的md5碼並非最後一次update的字串對應的md5碼,而是對此前所有update的字串的拼接後計算出的md5碼,當然前提是update前面的物件是同一個。
如何驗證這個結論呢?程式碼奉上:
import hashlib
m = hashlib.md5()
m.update(b'py')
print(m.hexdigest())
m.update(b'thon')
print(m.hexdigest())
print('-------')
n = hashlib.md5()
n.update(b'python')#一次性update一個字串
print(n.hexdigest())
print('========')
o = hashlib.md5()
o.update(b'py'+b'thon')#自行拼接字串輸出
print(o.hexdigest())
輸出:
dfed5bc177b87ab317c584e06566adc6
23eeeb4347bdd26bfc6b7ee9a3b755dd
-------
23eeeb4347bdd26bfc6b7ee9a3b755dd
========
23eeeb4347bdd26bfc6b7ee9a3b755dd
從以上程式碼可以看出,對同一個md5物件多次update字串,輸出的md5碼實際是對多個字串拼接後的md5計算。這裡也給我們一個啟示,如果要計算一個檔案的md5碼,如果檔案長度不會對機器的硬體資源造成壓力,一次性讀取內容後進行md5計算是最快捷的方式了。
2.2 sha1加密
如上文所述,其他演算法的用法非常類似,只是呼叫的演算法不同罷了。
import hashlib
m = hashlib.sha1()
m.update(b'sha1')
print(m.hexdigest())
輸出:
415ab40ae9b7cc4e66d6769cb2c08106e8293b48
2.3 sha256加密
如法炮製sha256演算法。
import hashlib
m = hashlib.sha256()
m.update(b'sha1')
print(m.hexdigest())
輸出:
b1565820a5cdac40e0520d23f9d0b1497f240ddc51d72eac6423d97d952d444f
2.4 sha512加密
看看sha512演算法把。
import hashlib
m = hashlib.sha512()
m.update(b'sha1')
print(m.hexdigest())
輸出:
4af46fa0152c825afee230022f46e3aedb0a9ee2a3dc20e30821a4d263327074b26455f29578812876011dd921132c6ed813b38d16b1b2a1c1fa7cea1a6b1fd9
2.5 hmac加密
以上加密演算法主要用於字串的加密處理,還有一種用於身份驗證可防竊聽的加密演算法,它就是hmac加密。雜湊訊息鑑別碼,簡稱HMAC,是一種基於訊息鑑別碼MAC(Message Authentication Code)的鑑別機制,是一種基於金鑰的雜湊演算法的認證協議。
HMAC加密演算法是一種基於金鑰的報文完整性的驗證方法,其安全性是建立在Hash加密演算法基礎上的。它要求通訊雙方共享金鑰、約定演算法、對報文進行Hash運算,形成固定長度的認證碼。通訊雙方通過認證碼的校驗來確定報文的合法性。HMAC加密演算法可以用來作加密、數字簽名、報文驗證等。
HMAC加密演算法的定義
HMAC加密演算法是一種執行“校驗和”的演算法,它通過對資料進行“求和”來檢查資料是否被更改了。在傳送資料以前,HMAC加密演算法對資料塊和雙方約定的公鑰進行“雜湊操作”,以生成稱為“摘要”的東西,附加在待傳送的資料塊中。當資料和摘要到達其目的地時,就使用HMAC加密演算法來生成另一個校驗和,如果兩個數字相匹配,那麼資料未被做任何篡改。否則,就意味著資料在傳輸或儲存過程中被某些居心叵測的人作了手腳。
實際的典型應用場景是挑戰/響應”(Challenge/Response)身份認證,認證流程如下:
(1) 客戶端向伺服器發出一個驗證請求。
(2) 伺服器接到此請求後生成一個隨機數並通過網路傳輸給客戶端(此為挑戰)。
(3) 客戶端將收到的隨機數結合本地的密碼,通過雙方約定一致的演算法進行HMAC-MD5運算並得到一個結果作為認證證據傳給伺服器(此為響應)。
(4) 與此同時,伺服器也使用該隨機數與儲存在伺服器資料庫中的該客戶金鑰進行HMAC-MD5運算,如果伺服器的運算結果與客戶端傳回的響應結果相同,則認為客戶端是一個合法使用者。
以上是理論背景知識,python中的用法如下:
import hmac
h = hmac.new(b'hi', b'python') #這裡的hi是雙方隨機生成的資料塊,相當於額外加的料,python才是真正的核心資料
print(h.hexdigest())
輸出:
392e75a856ddb4f8203ef82f7f21b391
三、關於加密演算法
以上講述了python中典型的加密演算法的使用。實際上加密演算法和密碼學的理論博大精深,在實際應用中還需要結合各種演算法的特點來進行選擇,在安全性和計算效率之間取得一個可滿足需求的平衡點(如md5的演算法安全性堪憂,sha512的輸出明顯比sha1要複雜得多,另外還有des、3des等演算法等等)
相關文章
- 模組學習之hashlib模組
- python模組之hashlibPython
- Python模組分析:第2節-hashlib加密模組Python加密
- 每週一個 Python 模組 | hashlibPython
- python常用模組補充hashlib configparser logging,subprocess模組Python
- hashlib、logging模組
- [Python模組學習] glob模組Python
- Python學習——logging模組Python
- Python學習——shelve模組Python
- Python學習——xml模組PythonXML
- Python學習——configparser模組Python
- Python學習之模組Python
- 序列化模組,隨機數模組,os模組,sys模組,hashlib模組隨機
- Python學習之常用模組Python
- 學習Python的urllib模組Python
- Python學習之 datetime模組Python
- python基礎學習16—-模組Python
- Python學習之模組與包Python
- Python的shutil zipfile tarfile模組學習Python
- Python學習之如何引用Python自定義模組?Python
- 模組學習之logging模組
- Python學習【第十四篇】shutil模組Python
- itertools 模組學習
- python開發學習之如何更好的引用Python模組?Python
- Python開發常用的庫及模組!Python學習教程Python
- Python學習筆記_函式_匯入模組Python筆記函式
- Python學習【第十二篇】time & datetime模組Python
- 反射,hashlib模組,正則匹配,冒泡,選擇,插入排序反射排序
- Python學習【第十三篇】隨機數相關:random模組&string模組Python隨機random
- Python3學習筆記4 , 迴圈、模組Python筆記
- retrying模組的學習
- Node fs模組學習
- Linux核心模組學習Linux
- nginx學習之模組Nginx
- python 模組:itsdangerous 模組Python
- Python模組:time模組Python
- Node 快速學習 crypto 模組
- 高通 QUP模組學習