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 line 13 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 return 17 with open(‘userinfo‘,‘a‘,encoding=‘utf-8‘) as f: 18 f.write(‘%s|%s|%s\n‘%(name,get_mad5(pwd),role)) 19 return True 20 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 hashlib 11 # import os 12 # 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) # 43d62b60d0bb6b4710d9d2b727a8f23b 22 # print(‘43d62b60d0bb6b4710d9d2b727a8f23b‘==‘43d62b60d0bb6b4710d9d2b727a8f23b‘)