【jwt】

HMAC-SHA256

是一种通过特别计算方式之后产生的消息认证码使用散列算法同时结合一个加密密钥。它可以用来保证数据的完整性,同时可以用来作某个消息的身份验证


import hmac

key = b''
string = b''
h = hmac.new(key, string, digestmod=hashlib.sha256)
h.digest()

JWT-校验jwt规则

  1. 确认alg解析header
  2. 签名校验-根据传过来的header和payload按 alg 指明的算法进行签名,将签名结果和传过来的sign进行对比,若对比一致,则校验通过。
  3. 获取payload自定义内容
# 安装pyjwt,而不是jwt
pip install pyjwt -i https://pypi.tuna.tsinghua.edu.cn/simple/

JWT的三部分

生成的token由三部分组成,以.分隔

import jwt
import time
import base64


def make_token(username, expire=3600 * 24):
    key = '123456'
    now_t = time.time()
    payload_data = {
        'username': username,
        'exp': now_t + expire
    }
    return jwt.encode(payload_data, key, algorithm='HS256')


def unmake_token(token):
    key = '123456'
    return jwt.decode(token, key, algorithms=['HS256'])


token = make_token('poppy')
print(f'token:{token},{type(token)}')
# 第一部分,头信息,注明使用的算法、类型等信息,采用base64生成
headers = token.split('.')[0]
headers = base64.b64decode(headers).decode('utf-8')
print(f'headers:{headers},{type(headers)}')

# 第二部分,payload,需要加密的信息,通常包括用户信息等,采用base64生成
payload = token.split('.')[1]
payload = base64.b64decode(payload).decode('utf-8')
print(f'payload:{payload},{type(payload)}')

# 第三部分是对第一、二部分经过加密后得到的
# --------------------------------------------

# 如果第三部分经过解密以后与第一、二部分符合,则token有效,返回加密的内容
ori_string = unmake_token(token)
print(f'ori_string:{ori_string},{type(ori_string)}')


token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InBvcHB5IiwiZXhwIjoxNzA2NTkyNDA3LjgzNTA3NjZ9.GwJa7CLxE1N7-S7COWCgut4AHE_NTTM9rS4XvRqPVDk,<class 'str'>
headers:{"alg":"HS256","typ":"JWT"},<class 'str'>
payload:{"username":"poppy","exp":1706592407.8350766},<class 'str'>
ori_string:{'username': 'poppy', 'exp': 1706592407.8350766},<class 'dict'>
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值