pip install jwt
"""
python 实现jwt
"""
import time
import json
import copy
import base64
import hmac
class Jwt:
def __init__(self):
pass
@staticmethod
def base64_encode(string):
"""
功能函数: base64编码
:param string: 预编码字符串
:return: 编码后的结果(字节串)
"""
return base64.urlsafe_b64encode(string.encode()).replace(b'=', b'')
@staticmethod
def base64_decode(b64_string):
"""
功能函数:base64解码
:param b64_string: 需要解码的base64字符串
:return: 解码后的结果(字符串)
"""
result = len(b64_string)%4
if result != 0:
b64_string += "="*(4-result)
return base64.urlsafe_b64decode(b64_string.encode()).decode()
@staticmethod
def make_token(payload,key,expire=300):
"""
生成token
"""
header={"alg":"HS256","typ":"JWT"}
header = json.dumps(header,separators=(",",":"),sort_keys=True)
part1 = Jwt.base64_encode(header)
payload_dict = copy.deepcopy(payload)
payload_dict["exp"] = time.time() + expire
payload_dict = json.dumps(payload_dict,separators=(",", ":"),sort_keys=True)
part2 = Jwt.base64_encode(payload_dict)
part1_2 = part1 + b'.' +part2
sign = hmac.new(key.encode(),part1_2,digestmod="SHA256").hexdigest()
sign = Jwt.base64_encode(sign)
return (part1_2 + b'.' + sign).decode()
@staticmethod
def check_token(token,key):
"""
校验token
"""
part1,part2,user_part3 = token.split(".")
sign = hmac.new(key.encode(),(part1+"."+part2).encode(),digestmod="SHA256").hexdigest()
server_part3 = Jwt.base64_encode(sign).decode()
if server_part3 != user_part3:
raise
print("token合法")
part2_dict = Jwt.base64_decode(part2)
part2_dict = json.loads(part2_dict)
exp = part2_dict["exp"]
now = time.time()
if now > exp:
raise
return part2_dict
if __name__ == '__main__':
token= Jwt.make_token(
payload={"username":"liying"},
key='1234567',
expire=10
)
print(f'token是:{token}')
print(Jwt.check_token(token,"1234567"))



