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
)
print(Jwt
.decode
(ticket
))
转载请注明原文地址: https://mac.8miu.com/read-494063.html