JWT

mac2024-06-25  54

import json import hmac import base64 import time class Jwt: def __init__(): pass @staticmethod def b64encode(j_s): return base64.urlsafe_b64encode(j_s).replace(b'=', b'') @staticmethod def encode(payload, key, exp=1): header = {'alg':'HS256', 'typ':'JWT'} payload['exp'] = time.time()+exp jheader = json.dumps(header, sort_keys=True, separators=(',',':')) jpayload = json.dumps(payload, sort_keys=True, separators=(',',':')) bheader = Jwt.b64encode(jheader.encode()).decode() bpayload = Jwt.b64encode(jpayload.encode()).decode() str = bheader+'.'+bpayload h = hmac.new(key.encode(), str.encode(), digestmod='SHA256') hstr = h.digest() bstr = Jwt.b64encode(hstr).decode() return (str + '.' + bstr) def addequal(s): temp = len(s)%4 return s+'='*((4-temp)%4) @staticmethod def decode(jwt_s): jwt_sl = jwt_s.split('.') bheader = Jwt.addequal(jwt_sl[0]) bpayload = Jwt.addequal(jwt_sl[1]) str = bheader+'.'+bpayload str = str.replace('=', '') print(str) hstr = Jwt.addequal(jwt_sl[2]) payloaddict = json.loads(base64.urlsafe_b64decode(bpayload).decode()) if(time.time()>payloaddict['exp']): print('时间过期') else: print('时间有效') h = hmac.new('key'.encode(), str.encode(), digestmod='SHA256') return Jwt.b64encode(h.digest()).decode() pass if __name__ == '__main__': ticket = Jwt.encode({'username':'seal'}, 'key') print(ticket) # time.sleep(1) print(Jwt.decode(ticket))
最新回复(0)