Python之路——hashlib模块

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
'%(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')
原文地址:https://www.cnblogs.com/liuyankui163/p/8336493.html