上一篇文章: Python模塊分析:第1節-random模塊
下一篇文章: Python模塊分析:第3節-typing模塊
hashlib模塊是用來對字符串進行hash加密的模塊,明文與密文是一一對應不變的關係;用於註冊、登陸時用戶名、密碼等加密使用。算法
md5(),sha1(),sha224(),sha256(),sha3840(),sha512(),分別獲得不一樣的加密密文。數據庫
代碼實例:segmentfault
import hashlib def hash_fun_1(str1): #建立一個hahsh對象並對str1加密 m=hashlib.md5(str1.encode('utf-8')) print('獲取加密的密文,16進制,無參數',m.hexdigest()) print('獲取加密的密文,二進制,無參數:',m.digest()) print('獲取hash塊的大小:',m.block_size) print('hash密鑰佔多少個字節:',m.digest_size) print('查看當前得到的hash對象的加密算法',m.name) #更新密文 m.update(str1.encode('utf-8')) print('獲取加密的密文,16進制,無參數', m.hexdigest()) print('獲取加密的密文,二進制,無參數:', m.digest()) print('獲取hash塊的大小:', m.block_size) print('hash密鑰佔多少個字節:', m.digest_size) print('查看當前得到的hash對象的加密算法', m.name) if __name__ == '__main__': hash_fun_1('mark')
結果:dom
獲取加密的密文,16進制,無參數 ea82410c7a9991816b5eeeebe195e20a 獲取加密的密文,二進制,無參數: b'\xea\x82A\x0cz\x99\x91\x81k^\xee\xeb\xe1\x95\xe2\n' 獲取hash塊的大小: 64 hash密鑰佔多少個字節: 16 查看當前得到的hash對象的加密算法 md5 獲取加密的密文,16進制,無參數 ac673f4dbac79922838901b5974a419a 獲取加密的密文,二進制,無參數: b'\xacg?M\xba\xc7\x99"\x83\x89\x01\xb5\x97JA\x9a' 獲取hash塊的大小: 64 hash密鑰佔多少個字節: 16 查看當前得到的hash對象的加密算法 md5
m=hashlib.new('md5',b'cai')#選擇md5加密函數加密字符串‘cai’ m=hashlib.md5('cai'.encode('utf-8'))#加密的另外一種寫法
舉例:函數
import hashlib m1=hashlib.md5() m2=m1.copy() m1.update('a'.encode('utf-8')) m1.update('b'.encode('utf-8')) print(m1.hexdigest())#輸出密文 m2.update('ab'.encode('utf-8')) print(m2.hexdigest())#輸出另外一個密文
運行結果:大數據
187ef4436122d1cc2f40dc2b92f0eba0 187ef4436122d1cc2f40dc2b92f0eba0
加密算法獲得的密文不可逆,可是密文與明文之間的關係是一一對應的,這就使得解密出現了可能,使用大數據存儲密文與明文對用關係,若是數據庫內恰好有對應的密文,就能夠找到明文完成解密,經常使用的解密網站:http://www.cmd5.com/,經過輸入密文查找對於的明文。網站
爲了增大破解的難度,通常須要對密碼進行屢次迭代加密,hashlib模塊有一個專門的函數。加密
代碼實例:code
import hashlib import binascii #sha256爲算法名稱,12345678爲要加密的密碼 #mark指的是雜質,額外添加的東西,使得破解更難 #10 000是迭代次數,能夠理解爲加密次數 pwd=hashlib.pbkdf2_hmac('sha256',b'12345678',b'mark',10000) print(binascii.hexlify(pwd).decode('utf-8'))
結果:對象
129d11e9ba1f3ef4e1393516d434f356363ffe68d7baca37fd1e91f0e87abe36
上一篇文章: Python模塊分析:第1節-random模塊
下一篇文章: Python模塊分析:第3節-typing模塊