中级
手写JWT验证与解析
未完成
中级参考
代码结构已给出,请填写 ____ 处
def solve():
from pyodide.http import open_url
from io import StringIO
tokens_csv = open_url(____).read()
import base64, hmac, hashlib, json
SECRET = '____'
def b64url_decode(____):
pad = ____ - len(____) % ____
if pad != ____: s += '____' * pad
return base64.urlsafe_b64decode(____)
def b64url(____):
if isinstance(____): s = s.encode()
return base64.urlsafe_b64encode(____).rstrip(____).decode()
def verify_jwt(____):
try:
h, p, s = token.split(____)
except ValueError:
return False, None, '____'
expected_sig = b64url(hmac.new(secret.encode(), f'____'.encode(), hashlib.sha256).digest())
if expected_sig != s:
return False, None, '____'
payload = json.loads(b64url_decode(____))
if payload.get(____) < now:
return False, payload, '____'
return True, payload, '____'
def make_jwt(____):
iat = ____
h = b64url(json.dumps(____))
p = b64url(json.dumps(____))
sig = b64url(hmac.new(SECRET.encode(), f'____'.encode(), hashlib.sha256).digest())
return f'____'
tokens = [make_jwt(____), make_jwt(____), make_jwt(____)+'____', make_jwt(____)]
for t in tokens:
ok, payload, msg = verify_jwt(____)
sub = payload.get(____) if payload else None
print(____)
示例
输入
solve()
期望输出
sub=1: valid=True, msg=ok sub=2: valid=False, msg=token expired sub=None: valid=False, msg=invalid signature sub=4: valid=True, msg=ok
👑
升级 VIP
解锁全部题目,畅通无阻地学习
- ✓ 解锁全部训练包所有题目
- ✓ 查看完整参考代码和提示
- ✓ 浏览器内直接运行 Python 代码
- ✓ 自动批改 + 进度追踪
30天
¥18
1年
¥99
2年
¥158
3年
¥199