一.当用明文密码进行信息存储的时候,会导致密码的泄露,如何解决问题
通过导入hashlib模块,利用里面存在的算法对字符串进行加密计算得到一串密文的结果
1.这个过程不可逆
2.对于同一个字符串,同一种算法 计算的结果永远是相同的
3.对于不同的字符串,计算的结果总是不同的
import hashlib # hashlib.md5 # 最通用最快捷相对简单 # hashlib.sha1 # 已经开始被大家广泛应用 md5_obj = hashlib.md5() md5_obj.update('alex3714'.encode('utf-8')) ret = md5_obj.hexdigest() print(ret)#aee949757a2e698417463d47acac93df
通过input输入pwd,通过md5算法进行加密
pwd = input('>>>') md5_obj = hashlib.md5() md5_obj.update(pwd.encode('utf-8')) ret = md5_obj.hexdigest() print(ret)
# 登陆 作业 # 注册的时候,用户名|密文密码 记录到文件里 # 登陆的时候,密码用同样的方式转成密文 # 和文件中的进行比对 # 确认一致之后 登陆成功!
通过撞库可以到上面的比较简单的密码
如何使密码更复杂
通过更复杂的密码
对于程序员来说:通过加盐让你的密码更加安全
# 加固定的盐 # md5_obj = hashlib.md5('任意的字符串'.encode('utf-8')) # md5_obj.update('123456'.encode('utf-8')) # ret = md5_obj.hexdigest() # print(ret)
通过猜密码还是可能猜出加了固定盐的密码
通过动态加盐-是最安全的存储密码的方式
# md5_obj = hashlib.md5(alex.encode('utf-8')) # md5_obj.update(pwd.encode('utf-8')) # ret = md5_obj.hexdigest() # print(ret)
# md5_obj = hashlib.sha1('alex'.encode('utf-8')) # md5_obj.update('pwd'.encode('utf-8')) # ret = md5_obj.hexdigest() # print(ret)
hashlib模块
import hashlib # with open('file','rb') as f : # content = f.read() # md5_obj = hashlib.md5() # md5_obj.update(content) # print(md5_obj.hexdigest()) # # with open('file1','rb') as f : # content = f.read() # md5_obj = hashlib.md5() # md5_obj.update(content) # print(md5_obj.hexdigest())
#下面两个函数结果相等 # md5_obj = hashlib.md5() # md5_obj.update('hello,world'.encode('utf-8')) # print(md5_obj.hexdigest()) # # # md5_obj = hashlib.md5() # md5_obj.update('hello,'.encode('utf-8')) # md5_obj.update('world'.encode('utf-8')) # print(md5_obj.hexdigest())
# 文件非常大 大到4g的文件 # def md5_file(): # md5_obj = hashlib.md5() # with open('file','rb') as f : # for line in f: # md5_obj.update(line) # print(md5_obj.hexdigest()) # # md5_file()