標籤:class gets 不同 ret lis put range read port
hashlib提供摘要演算法的模組
1 import hashlib 2 def get_mad5(s): 3 md5 = hashlib.md5() 4 md5.update(bytes(s,encoding=‘utf-8‘)) 5 md5_pwd = md5.hexdigest() 6 return md5_pwd 7 def get_user_list(filename=‘userinfo‘): 8 u_lst = [] 9 with open(filename,‘r‘,encoding=‘utf-8‘) as f:10 for line in f:11 line = line.strip().split(‘|‘)12 yield line13 def save_user(name,pwd,role):14 for line in get_user_list():15 if name == line[0] and get_mad5(pwd)==line[1]:16 return17 with open(‘userinfo‘,‘a‘,encoding=‘utf-8‘) as f:18 f.write(‘%s|%s|%s\n‘%(name,get_mad5(pwd),role))19 return True20 while True:21 usr = input(‘username:‘).strip()22 pwd = input(‘password:‘).strip()23 role = input(‘role:‘).strip()24 if save_user(usr,pwd,role):25 print(‘success‘)26 else:print(‘發生錯誤‘)
不管演算法多麼不同,摘要的功能始終不變
對於相同的字串使用同一個演算法進行摘要,得到的值總是不變的
使用不同演算法對相同的字串進行摘要,得到的值應該不同
不管使用什麼演算法,hashlib的方式永遠不變
sha 演算法 隨著 演算法複雜程度的增加 摘要的時間成本空間成本都會增加
摘要演算法應用
密碼的密文儲存
檔案的一致性驗證
在下載的時候 檢查我們下載的檔案和遠程伺服器上的檔案是否一致
兩台機器上的兩個檔案 你想檢查這兩個檔案是否相等
加鹽
1 import hashlib # 提供摘要演算法的模組2 md5 = hashlib.md5(bytes(‘鹽‘,encoding=‘utf-8‘))3 # md5 = hashlib.md5()4 md5.update(b‘123456‘)5 print(md5.hexdigest()) # 970d52d48082f3fb0c59d5611d25ec1e
計算一個檔案的md5值
1 # import hashlib 2 # f = open(‘myfile‘,‘rb‘) 3 # md5 = hashlib.md5() 4 # md5.update(f.read()) 5 # md5 = md5.hexdigest() 6 # f.close() 7 # print(md5) # 43d62b60d0bb6b4710d9d2b727a8f23b 8 9 10 # import hashlib11 # import os12 # file_size = os.path.getsize(‘myfile‘)13 # a,b=divmod(file_size,1024)14 # md5 = hashlib.md5()15 # f = open(‘myfile‘,‘rb‘)16 # for i in range(a):17 # md5.update(f.read(1024))18 # md5.update(f.read(b))19 # f.close()20 # md5 = md5.hexdigest()21 # print(md5) # 43d62b60d0bb6b4710d9d2b727a8f23b22 # print(‘43d62b60d0bb6b4710d9d2b727a8f23b‘==‘43d62b60d0bb6b4710d9d2b727a8f23b‘)
Python之路——hashlib模組