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())