1. 程式人生 > >day30 hashlib模組

day30 hashlib模組


hashlib 提供摘要演算法
  最常見的就是MD5,當然一般來說MD5已經被足夠了
  不管演算法多不一樣,但是摘要的功能是不變的
  對於相同的字串進行摘要,使用同一個演算法得到的值總是不變的
  不同演算法的話,會無法一致而不通過
  演算法的複雜程度越高越安全,但是時間空間成本也會更高
1 import hashlib
2 md5 = hashlib.md5()
3 md5.update(b'yangtuo')
4 print(md5.hexdigest())
5 # 2da474673e951b9e33aeb80290eb0501
摘要演算法
  密碼的密文儲存
  檔案的一致性驗證
  下載的時候檢查下載檔案和遠端伺服器的檔案是否一致
  兩臺機器上的兩個檔案檢查是否相等
  ps:
    必須是位元組型別內容才能摘要處理


模擬例項:

 1 # 模擬使用者註冊
 2 # 使用者輸入使用者名稱,密碼
 3 # 使用者輸入密碼
 4 # 明文的密碼進行摘要 得到一串密文後寫入檔案
 5 
 6 
 7 # 模擬使用者登入
 8 import hashlib
 9 usr = input("username>>>")
10 pwd = input("password>>>")
11 with open("userinfo")as f :
12     for line in f:
13         user,passwd,role = line.split("|")
14         md5 = hashlib.md5()
15 md5.update(bytes(pwd,encoding="utf-8")) 16 md5_pwd = md5.hexdigest() 17 if usr == user and md5_pwd == passwd: 18 print("login in ") 19 else:print("go out") 20 21 # 加鹽 22 # 23 import hashlib 24 md5 = hashlib.md5(bytes("salt",encoding="utf-8")) 25 md5.update(b'
alex3714') 26 print(md5.hexdigest()) 27 28 # 動態加鹽 29 # 使用者名稱 密碼 30 # 使用使用者名稱的一部分或者直接整個使用者名稱作為鹽 31 import hashlib 32 md5 = hashlib.md5(bytes("salt",encoding="utf-8")+b"dhahdkashdawhd") 33 md5.update(b'alex3714') 34 print(md5.hexdigest()) 35 36 # 檔案的一致性校驗 37 # 別加鹽,別人才不知道你加了什麼鹽,而且僅僅是判斷是否一致,又不是什麼高階機密 38 # 檔案比較長的時候,可以分次進行update,一次 39 import hashlib 40 md5 = hashlib.md5() 41 md5.update(b'alex') 42 md5.update(b'3714') 43 print(md5.hexdigest())