python实现jwt加密的两种方式

一,不用借助jwt模块,python 实现jwt HS256加密

import hashlib
import json
import base64
import hmac
import time


def base64url_encode(input):
    return base64.urlsafe_b64encode(input).replace(b'=', b'')


def sign(self, msg, key):
    return hmac.new(key, msg, self.hash_alg).digest().decode('utf-8')


segments = []
header = {'type': 'sign', 'alg': 'HS256'}
json_header = json.dumps(
    header,
    separators=(',', ':')
).encode('utf-8')

payload = {'timestamp': time.time()}
payload = json.dumps(
    payload,
    separators=(',', ':')
).encode('utf-8')
segments.append(base64url_encode(json_header))
segments.append(base64url_encode(payload))
signing_input = b'.'.join(segments)
print(signing_input)
signature = hmac.new('iospl4xn1ccrgr4p5u7wkvcnsnz42uxgbj07vvmx'.encode('utf-8'), signing_input, hashlib.sha256).digest()
segments.append(base64url_encode(signature))
r = b'.'.join(segments)
print(r.decode('utf-8'))

二,借助JWT模块加密

import jwt

class JwtToken(object):

    _salt = '-)t&-j=^)xjy+=^nr*(#xj-ql+zmrt8o1rvon8v@^*wf742%f*'

    _expire_message = dict(code=1200, msg="token 已经失效")

    _unknown_error_message = dict(code=4200, msg="token 解析失败")

    @classmethod
    def generate_token(cls, payload: dict) -> str:
        headers = dict(typ="jwt", alg="HS256")
        resut = jwt.encode(payload=payload, key=cls._salt, algorithm="HS256",headers=headers).decode('utf-8')
        return resut

    @classmethod
    def parse_token(cls, token: str) -> tuple:
        verify_status = False
        try:
            payload_data = jwt.decode(token, cls._salt, algorithms=['HS256'])
            verify_status = True
        except jwt.ExpiredSignatureError:
            payload_data = cls._expire_message
        except Exception as _err:
            payload_data = cls._unknown_error_message
        return verify_status, payload_data
'''
jwt.encode(
        payload,
        key,
        api_settings.JWT_ALGORITHM
    ).decode('utf-8')
'''

if __name__ == '__main__':
    TEST_DATA = dict(username='admin', exp=datetime.utcnow() + timedelta(days=1))
    token = JwtToken.generate_token(TEST_DATA)
    print(token)
    payload = JwtToken.parse_token(token)
    print(payload)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!关于使用Python爬虫来爬取JWT(JSON Web Token)的问题,我可以为您提供一些指导。 首先,JWT是一种用于身份验证和信息传递的开放标准。如果您想要爬取包含JWT的网页数据,您需要先进行身份验证并获取有效的JWT令牌。 以下是一个基本的流程来爬取JWT保护的网页数据: 1. 导入必要的库:您需要导入`requests`和`jwt`库,其中`requests`用于发送HTTP请求,`jwt`用于处理JWT令牌。 2. 进行身份验证并获取JWT令牌:根据您访问的网站的身份验证方式,您可能需要提供用户名和密码等凭据来获取JWT令牌。您可以使用`requests`库发送POST请求进行身份验证,并从响应中提取JWT令牌。 3. 使用JWT令牌进行爬取:一旦您成功获取JWT令牌,您可以将其作为请求头的一部分发送到受保护的网页。在`requests`库中,您可以使用`headers`参数来设置请求头,将JWT令牌放在其中。 下面是一个简单的示例代码片段,展示了如何使用Python爬虫爬取JWT保护的网页数据: ```python import requests import jwt # 进行身份验证并获取JWT令牌 def get_jwt_token(): # 构建身份验证请求 auth_data = { 'username': 'your_username', 'password': 'your_password' } response = requests.post('http://example.com/auth', json=auth_data) # 提取JWT令牌 jwt_token = response.json()['jwt_token'] return jwt_token # 使用JWT令牌进行爬取 def crawl_protected_page(): jwt_token = get_jwt_token() # 设置请求头包含JWT令牌 headers = { 'Authorization': 'Bearer ' + jwt_token } response = requests.get('http://example.com/protected_page', headers=headers) data = response.json() # 处理爬取到的数据 # ... ``` 请注意,上述示例代码仅为演示目的,并不适用于所有网站。实际情况可能会因网站的身份验证和JWT令牌使用方式而有所不同。确保根据您所访问的网站的要求进行适当的修改和调整。 希望这些信息能对您有所帮助!如果您有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值