Python:使用PyJWT实现JSON Web Tokens加密解密

举报
彭世瑜 发表于 2021/08/14 01:29:59 2021/08/14
【摘要】 科普 JSON Web Token 入门教程 Json Web Token JWT三部分组成: (1)Header (2)Payload (3)Signature Header.Payload.Signature 1 Base64URL 算法: Base64 有三个字符+、/和=,在 URL 里面有特殊含义, 所以要被替换掉:=被省略、+替换成-,/替换成_ ...

科普

JSON Web Token 入门教程

Json Web Token JWT三部分组成:
(1)Header
(2)Payload
(3)Signature

Header.Payload.Signature

  
 
  • 1

Base64URL 算法:
Base64 有三个字符+、/和=,在 URL 里面有特殊含义,
所以要被替换掉:=被省略、+替换成-,/替换成_

代码实现

github:https://github.com/jpadilla/pyjwt/
文档:https://pyjwt.readthedocs.io/en/latest/index.html

安装

pip install PyJWT

  
 
  • 1

复制jwt网站的数据进行加解密测试
https://jwt.io/

代码示例

# -*- coding: utf-8 -*-

import jwt

data = {
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

# 加密 py3加密后是字节型数据
encoded = jwt.encode(data, 'secret', algorithm='HS256')
print(encoded.decode())
# eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.
# eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.
# DzMJlzRbt6kdh1Kbbqv8SA8QsddwfSoM1bqw41tQY2k


print(jwt.decode(encoded, 'secret', algorithms=['HS256']))
# {'sub': '1234567890', 'name': 'John Doe', 'iat': 1516239022}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

增加过期时间,Python3代码示例

# -*- coding: utf-8 -*-
import time
from datetime import datetime, timedelta

import jwt


class JwtUtil(object): def __init__(self, key): self.key = key def encode(self, payload, expires=7): """ 获取token :param payload: dict :param expires: 过期时间:天 :return: str """ # 使用utc时间 payload['exp'] = datetime.utcnow() + timedelta(days=expires) return jwt.encode(payload=payload, key=self.key).decode() def decode(self, token): """ 验证并解析token :param token: str :return:  dict """ return jwt.decode(jwt=token, key=self.key)


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/97321304

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。