hash三大特性
1.不可逆
2.定长输出
3.雪崩
json.loads
json.dumps
replace('==',"")
import base64
#base64所有方法的参数和结果都是字节串
username = "zhaoliying"
a = base64.b64encode(username.encode())
print(a.decode())
result=base64.b64decode(a)
print(result.decode())
import base64
import json
import hmac
import time
class Jwt:
def __init__(self):
pass
def make_token(self,payload,key):
#1.header
header = {"alg":"HS256","typ":"JWT"}
header = json.dumps(header)
header_bs64 = self.make_bs64(header)
#2.payload
payload=json.dumps(payload)
payload_bs64 = self.make_bs64(payload)
#3.sign
part_one_two = header_bs64+b'.'+payload_bs64
sign = hmac.new(key.encode(),part_one_two,digestmod="SHA256").hexdigest()
sign_bs64=self.make_bs64(sign)
return part_one_two+b"."+sign_bs64
def check_token(self,token,key):
"""
:param token: 令牌token -会话保持
:return:
"""
#1.合法性
part1,part2,part3 = token.split(b".")
sign = hmac.new(key.encode(),part1+b"."+part2,digestmod='SHA256').hexdigest()
sign_bs64 = self.make_bs64(sign)
if sign_bs64 != part3:
raise
#2.有效期
#给part2补等于号
#base64的长度一定是4的倍数
get_len = len(part2) % 4
if get_len != 0:
part2 += (4-get_len) * b"="
payload = json.loads(base64.urlsafe_b64decode(part2))
exp = payload.get('exp')
now = int(time.time())
if now>exp:
raise
return payload
def make_bs64(self,string):
"""
:param string: base64编码
:return:
"""
return base64.urlsafe_b64encode(string.encode()).replace(b"=",b"")
if __name__ == '__main__':
jwt_obj=Jwt()
payload={
"exp":int(time.time())+5,
"username":"liying",
}
key="sadfghjkertyuixcvbn"
token=jwt_obj.make_token(payload,key)
print(token)
# time.sleep(6)
try:
payload = jwt_obj.check_token(token,key)
print(payload)
except Exception as e:
print(e)
print("请重新登录")
import jwt
import time
#1.生成token
payload = {
"exp":int(time.time()+5)
}
key="FDKLGJHFSDAIOUYRTEPOIURTE"
token = jwt.encode(payload,key,algorithm="HS256")
print(token)
#2.校验token
time.sleep(6)
payload=jwt.decode(token,key,algorithms="HS256")
print(payload)
import hmac
key=b'1234567890'
msg=b'{"username":"zhaoliy","exp":"871016"}'
hobj = hmac.new(key,msg,digestmod='SHA256')
print(hobj.hexdigest())