"""
hash
unhashable 不可hash 是可变的
hash 是一种算法
特点:
1.输入任意长度的数据 输出固定长度的字符串,因此也称之为信息摘要算法
2.hash算法有很多实现方式,当算符固定时,如果输入相同,输出结果必然相同
(极小的几率会出现,不同的输入产生相同的结果)
3.无法通过hash结果反解出源数据
使用场景
1.可以用于加密
2.用于文件校验
# root 123
# root asjdsajdsjladlsjadlsjadjk-
# 我不知道用户明文密码 意思时知道加密后的密码
m = md5()
m.updat()
m.hexdigest()
注意:加密的只能时字节类型 得到的时字符串类型
"""
import hashlib
# # 创建一个加密对象
m = hashlib.md5()
# 计算123456的hash值
m.update("abcabc".encode("utf-8"))
# 提取加密结果
# print(len(m.hexdigest()))
print(m.hexdigest())
# # 创建一个加密对象
# m = hashlib.sha512()
# # 计算123456的hash值
# m.update("123456".encode("utf-8"))
# # 提取加密结果
# print(len(m.hexdigest()))
# with open("2.re模块.py","rb") as f:
# m = hashlib.md5()
# m.update(f.read())
# print(m.hexdigest())
# with open("userdb","wt") as f:
# res = input("pwd:")
# m = hashlib.md5()
# m.update(res.encode("utf-8"))
# r = m.hexdigest()
# f.write(r)
# with open("userdb","rt") as f:
# pwd = f.read()
#
# res = input("pwd:")
# m = hashlib.md5()
# m.update(res.encode("utf-8"))
# r = m.hexdigest()
#
# if r == pwd:
# print("成功")
# update 可以多次执行 也就意味 你可以打开文件 读一次就掉调用一次update
# dbdic = {"440ac85892ca43ad26d44c7ad9d47d3e":"abcabc","e10adc3949ba59abbe56e057f20f883e":"123456"}
#
# 简单的密码可能通过撞库破解,所以我们最好给密码加点盐,在原有的数据基础上加上一段固定的数据
yan = "98273jshad--_++**&*&*ajkdh2y3jks83j2sjans"
# pwd = "123456" + yan
# m = hashlib.md5()
# m.update(pwd.encode("utf-8"))
# r = m.hexdigest()
# print(r)
#
#
# pwd = "123456"
# pwd = pwd + yan
#
# m = hashlib.md5()
# m.update(pwd.encode("utf-8"))
# r = m.hexdigest()
# print(r)
import hmac
m = hmac.new(yan.encode("utf-8"))
m.update("123456".encode("utf-8"))
print(m.hexdigest())