day30 hashlib模块


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



猜你喜欢

转载自www.cnblogs.com/shijieli/p/9939320.html