Python的hashlib模塊和hmac模塊
hashlib模塊
模塊提供了一些hash演算法,也叫摘要演算法、散列演算法,如MD5、SHA1等。
摘要演算法是一種加密過程不需要密鑰,並且經過加密的數據無法被解密,只有輸入相同明文數據經過相同消息摘要演算法才能得到相同的密文。
功能上是把任意長度的數據轉換為一個長度固定的數據串。
分多次調用md5方法,最後的計算結果是一樣的。
還有另一種常見的演算法SHA1,用法一樣。
比SHA1更安全的演算法是SHA256和SHA512,不過越安全的演算法不僅越慢,而且摘要長度更長。
更安全的MD5
一般用戶的密碼存到資料庫中時都進行了MD5加密,雖然不好暴力破解,但是可以用常用口令的MD5值來比對,就能得到常用口令的賬號密碼。
為了防止MD5被識別成常用口令,通過使用加鹽的辦法。通過對原始口令加一個複雜字元串來實現。
但是如果有兩個用戶都使用了相同的簡單口令,在資料庫中,將存儲兩條相同的MD5值,這說明這兩個用戶的口令是一樣的。
這種情況下如果假定用戶無法修改登錄名,就可以通過把登錄名作為Salt的一部分來計算MD5,從而實現相同口令的用戶也存儲不同的MD5。
要注意摘要演算法不是加密演算法,不能用於加密(因為無法通過摘要反推明文),只能用於防篡改,但是它的單向計算特性決定了可以在不存儲明文口令的情況下驗證用戶口令。
hmac模塊
hmac演算法通過使用一個key來代替自定義的加鹽方式,使用標準的演算法,在計算哈希時吧key混入計算過程中。
計算前需要傳入原始message,隨機key,哈希演算法,這裡採用MD5,使用hmac的代碼如下:
hmac輸出的長度和原始哈希演算法的長度一致。需要注意傳入的key和message都是bytes類型,str類型需要首先編碼為bytes。
TAG:Python |