最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、什么是JWT

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

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

二、JWT的組成

1. Header

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

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

2. Payload

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

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

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

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

3. Signature

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

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

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

三、爬蟲中遇到的js代碼

以下是我遇到的網站示例:

在這里插入圖片描述

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

import random
import time

import jwt


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

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

    # 隨機字符串 (JTI)
    o = str(int(int(time.time() * 1000) * random.random() * 10000))
    # print(o)
    # 當前時間戳 + 300 秒 (未來 5 分鐘)
    s = int(time.time() + 300)
    # print(s)
    # JWT payload 數據
    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]  # 獲取簽名部分

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


# 調用函數
result = get_t()
print(result)

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

相關文章

最新評論

苍梧县| 通江县| 望城县| 永登县| 手机| 宜兴市| 巴里| 社旗县| 枣强县| 彭水| 长岭县| 元朗区| 万载县| 专栏| 滨海县| 信丰县| 彰化县| 东港市| 监利县| 隆尧县| 怀柔区| 彩票| 四子王旗| 嘉兴市| 贵港市| 从化市| 永州市| 无为县| 高雄县| 白银市| 曲松县| 永济市| 从江县| 浠水县| 青海省| 松滋市| 乌拉特前旗| 彭山县| 金门县| 志丹县| 南城县|