欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實現(xiàn)JWT加解密的示例代碼

 更新時間:2025年04月28日 10:20:51   作者:洛必達爬蟲  
本文主要介紹了Python實現(xiàn)JWT加解密的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、什么是JWT

JWT(JSON Web Tokens)是一種用于在網(wǎng)絡(luò)應(yīng)用環(huán)境間安全地傳輸信息的簡潔的、URL安全的令牌標(biāo)準(zhǔn)。JWT的聲明一般被用來在身份提供者和服務(wù)提供者間傳遞被認(rèn)證的用戶身份信息,以便于從資源服務(wù)器獲取資源,也可以增加一些額外的其它業(yè)務(wù)邏輯所必須的聲明信息,該token也可直接被用于認(rèn)證,也可被加密。

通俗地說,JWT的本質(zhì)就是一個字符串,它是將用戶信息保存到一個Json字符串中,然后進行編碼后得到一個JWT token,并且這個JWT token帶有簽名信息,接收后可以校驗是否被篡改,所以可以用于在各方之間安全地將信息作為Json對象傳輸。官網(wǎng)地址:https://jwt.io/

二、JWT的組成

1. Header

頭部是一個描述JWT元數(shù)據(jù)的JSON對象,alg屬性表示簽名使用的算法,默認(rèn)為HMAC SHA256(寫為HS256);typ屬性表示令牌的類型,JWT令牌統(tǒng)一寫為JWT。最后,使用Base64 URL算法將上述JSON對象轉(zhuǎn)換為字符串保存,如下:

{
  "alg": "HS256",
  "typ": "JWT"
}

2. Payload

負(fù)載是JWT的主體內(nèi)容部分,也是一個JSON對象,包含需要傳遞的數(shù)據(jù)。 JWT指定七個默認(rèn)字段供選擇,如下:

iss:發(fā)行人
exp:到期時間
sub:主題
aud:用戶
nbf:在此之前不可用
iat:發(fā)布時間
jti:JWT ID用于標(biāo)識該JWT

除以上默認(rèn)字段外,我們還可以自定義私有字段,一般會把包含用戶信息的數(shù)據(jù)放到payload中,如下:

{
  "name": "John Doe",
  "num": 1516239022
}

3. Signature

簽名的作用是保證JWT的未被篡改。簽名的生成方式是將編碼后的頭部、編碼后的負(fù)載、秘密通過指定的算法進行簽名。簽名的作用是保證JWT的發(fā)送者不能抵賴自己發(fā)送的消息,接收者能夠驗證消息的完整性。這里是將前2部分的密文拼接起來,對這2部分進行HS256加密,然后加鹽,最后在對加密后的內(nèi)容用Base64加密一次。

注意JWT每部分的作用,在服務(wù)端接收到客戶端發(fā)送過來的JWT token之后:

  • headerpayload可以直接利用base64解碼出原文,從header中獲取哈希簽名的算法,從payload中獲取有效數(shù)據(jù)。
  • signature由于使用了不可逆的加密算法,無法解碼出原文,它的作用是校驗token有沒有被篡改。服務(wù)端獲取header中的加密算法之后,利用該算法加上secretKey對header、payload進行加密,比對加密后的數(shù)據(jù)和客戶端發(fā)送過來的是否一致。注意secretKey只能保存在服務(wù)端,而且對于不同的加密算法其含義有所不同,一般對于MD5類型的摘要加密算法,secretKey實際上代表的是鹽值。

三、爬蟲中遇到的js代碼

以下是我遇到的網(wǎng)站示例:

在這里插入圖片描述

四、使用Python實現(xiàn)

import random
import time

import jwt


def get_t():
    # 模擬 getConfig() 方法返回的配置
    config = {"key": "這是Key"}  # 替換為實際的密鑰
    key = config["key"]

    # 轉(zhuǎn)換密鑰為字節(jié)
    r = key.encode("utf-8")

    # 隨機字符串 (JTI)
    o = str(int(int(time.time() * 1000) * random.random() * 10000))
    # print(o)
    # 當(dāng)前時間戳 + 300 秒 (未來 5 分鐘)
    s = int(time.time() + 300)
    # print(s)
    # JWT payload 數(shù)據(jù)
    payload = {
        "a": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",  # 模擬用戶代理
        "exp": s,
        "jti": o,
    }

    # JWT header
    headers = {"alg": "HS256", "typ": "JWT"}
    # 生成 JWT
    token = jwt.encode(payload, r, algorithm="HS256", headers=headers)
    print(token)
    # 解密的方法
    print(jwt.decode(token, r, algorithms=["HS256"], headers=headers))
    # 獲取 JWT 的 payload 部分(Base64 編碼的第二部分)
    jwt_parts = token.split(".")
    jwt_payload_last_part = jwt_parts[2]  # 獲取簽名部分

    # 拼接結(jié)果
    final_token = f"{jwt_payload_last_part}.{o}{s}"
    return final_token


# 調(diào)用函數(shù)
result = get_t()
print(result)

到此這篇關(guān)于Python實現(xiàn)JWT加解密的示例代碼的文章就介紹到這了,更多相關(guān)Python JWT加解密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 對Python3中bytes和HexStr之間的轉(zhuǎn)換詳解

    對Python3中bytes和HexStr之間的轉(zhuǎn)換詳解

    今天小編就為大家分享一篇對Python3中bytes和HexStr之間的轉(zhuǎn)換詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 為什么說python適合寫爬蟲

    為什么說python適合寫爬蟲

    在本文中,小編給讀者們整理的一篇關(guān)于分析為什么說python適合寫爬蟲的語言的相關(guān)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • Django緩存系統(tǒng)實現(xiàn)過程解析

    Django緩存系統(tǒng)實現(xiàn)過程解析

    這篇文章主要介紹了Django緩存系統(tǒng)實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • 使用Pandas選擇數(shù)據(jù)子集的方法示例

    使用Pandas選擇數(shù)據(jù)子集的方法示例

    有時數(shù)據(jù)讀入后并不是對整體數(shù)據(jù)進行分析,而是數(shù)據(jù)中的部分子集,所以,該如何根據(jù)特定的條件實現(xiàn)數(shù)據(jù)子集的獲取將是本節(jié)的主要內(nèi)容,本文給大家介紹了使用Pandas選擇數(shù)據(jù)子集的方法示例,需要的朋友可以參考下
    2024-03-03
  • 對python中的乘法dot和對應(yīng)分量相乘multiply詳解

    對python中的乘法dot和對應(yīng)分量相乘multiply詳解

    今天小編就為大家分享一篇對python中的乘法dot和對應(yīng)分量相乘multiply詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • 淺談Python的正則表達式

    淺談Python的正則表達式

    這篇文章主要介紹了淺談Python的正則表達式,正則表達式本身是獨立于編程語言的知識,但是它又依附于編程語言,需要的朋友可以參考下
    2023-04-04
  • 對PyQt5的輸入對話框使用(QInputDialog)詳解

    對PyQt5的輸入對話框使用(QInputDialog)詳解

    今天小編就為大家分享一篇對PyQt5的輸入對話框使用(QInputDialog)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Python+matplotlib繪制不同大小和顏色散點圖實例

    Python+matplotlib繪制不同大小和顏色散點圖實例

    這篇文章主要介紹了Python+matplotlib繪制不同大小和顏色散點圖實例,matplotlib的用法是比較多種多樣的,下面一起看看其中的一個實例吧
    2018-01-01
  • 你應(yīng)該知道的Python3.6、3.7、3.8新特性小結(jié)

    你應(yīng)該知道的Python3.6、3.7、3.8新特性小結(jié)

    這篇文章主要介紹了你應(yīng)該知道的Python3.6、3.7、3.8新特性小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Python使用Mechanize模塊編寫爬蟲的要點解析

    Python使用Mechanize模塊編寫爬蟲的要點解析

    這篇文章主要介紹了Python使用Mechanize模塊編寫爬蟲的要點解析,作者還講解了Mechanize程序占用內(nèi)存過高問題的相關(guān)解決方法,需要的朋友可以參考下
    2016-03-03

最新評論