day30 hashlib模組
阿新 • • 發佈:2018-11-10
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())