Python模塊分析:第2節-hashlib加密模塊

上一篇文章: Python模塊分析:第1節-random模塊
下一篇文章: Python模塊分析:第3節-typing模塊

hashlib模塊是用來對字符串進行hash加密的模塊,明文與密文是一一對應不變的關係;用於註冊、登陸時用戶名、密碼等加密使用。算法

1、函數分析

一、共有5種加密算法

md5(),sha1(),sha224(),sha256(),sha3840(),sha512(),分別獲得不一樣的加密密文。數據庫

二、hashlib.hexdigest():獲取加密的密文,16進制,無參數
三、hashlib.digest():獲取加密的密文,二進制,無參數
四、hashlib.copy():複製一份當前建立的hash對象,無參數
五、update(str1,encoding('utf-8'')):更新加密的密文,獲得的密文與原來的密文不相同
六、hash.name:查看當前得到的hash對象的加密算法
七、hash.digest_size:hash密鑰佔多少個字節
八、hash.block_size:hash數據塊的大小
九、hashlib.algorithms_guaranteed:查看全部平臺都支持的hash算法
十、hashlib.algorithms_available:查看全部的hash加密算法

代碼實例: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

2、運用:

一、建立哈希對象,有兩種方式:
m=hashlib.new('md5',b'cai')#選擇md5加密函數加密字符串‘cai’
m=hashlib.md5('cai'.encode('utf-8'))#加密的另外一種寫法
二、特性用法:當須要加密的字符串過大的時候,可使用同一個hash對象分屢次加密,update(a)+update(b)=update(a+b)

舉例:函數

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

3、hash算法加密

加密算法獲得的密文不可逆,可是密文與明文之間的關係是一一對應的,這就使得解密出現了可能,使用大數據存儲密文與明文對用關係,若是數據庫內恰好有對應的密文,就能夠找到明文完成解密,經常使用的解密網站: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模塊
相關文章
相關標籤/搜索