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

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

 更新時間:2025年04月28日 10:20:51   作者:洛必達(dá)爬蟲  
本文主要介紹了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字符串中,然后進(jìn)行編碼后得到一個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ù)載、秘密通過指定的算法進(jìn)行簽名。簽名的作用是保證JWT的發(fā)送者不能抵賴自己發(fā)送的消息,接收者能夠驗證消息的完整性。這里是將前2部分的密文拼接起來,對這2部分進(jìn)行HS256加密,然后加鹽,最后在對加密后的內(nèi)容用Base64加密一次。

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

  • headerpayload可以直接利用base64解碼出原文,從header中獲取哈希簽名的算法,從payload中獲取有效數(shù)據(jù)。
  • signature由于使用了不可逆的加密算法,無法解碼出原文,它的作用是校驗token有沒有被篡改。服務(wù)端獲取header中的加密算法之后,利用該算法加上secretKey對headerpayload進(jìn)行加密,比對加密后的數(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")

    # 隨機(jī)字符串 (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)文章

最新評論

响水县| 杭锦旗| 海林市| 沅江市| 滁州市| 阳曲县| 娄烦县| 中超| 扶沟县| 石河子市| 盈江县| 定南县| 景德镇市| 昭平县| 武鸣县| 临朐县| 马边| 苍南县| 澄城县| 车险| 通城县| 阳泉市| 宁海县| 通河县| 昌平区| 永嘉县| 惠州市| 福清市| 徐州市| 横山县| 湖北省| 衡东县| 独山县| 洪洞县| 宽甸| 望城县| 三亚市| 西青区| 海城市| 卢湾区| 新民市|