JWT加密解密詳解

一、JWT簡介

JSON Web Token (JWT)是一種基於JSON格式的輕量級令牌規範,用於在網路應用中傳遞聲明。JWT規範允許對JSON數據進行數字簽名,以便驗證數據的完整性和真實性。由於它是通過數字簽名來實現驗證的,因此不需要進行資料庫查詢,可以大大降低伺服器的負載。

它由三個部分組成:Header 頭部、Payload 負載、Signature 簽名。一個完整的JWT Token如下圖所示:

<Header>.<Payload>.<Signature>

二、JWT加密解密代碼示例 – PHP

在PHP中,官方已經提供了firebase/php-jwt庫來實現JWT的編碼和解碼。示例如下:

1. 安裝php-jwt庫

composer require firebase/php-jwt

2. 編碼生成JWT Token

在生成JWT Token之前,需要先定義Header和Payload。Header一般是固定的,示例代碼如下:

$header = array(
    "alg" => "HS256",
    "typ" => "JWT"
);

Payload一般包含用戶的ID、名稱等信息,也可以自定義一些數據。示例代碼如下:

$payload = array(
    "user_id" => 123456,
    "username" => "John Smith",
    "email" => "john.smith@abc.com"
);

將Header和Payload使用base64編碼,拼接在一起,並使用HS256演算法進行簽名,即可生成JWT Token。示例代碼如下:

use \Firebase\JWT\JWT;
$key = "secret_key";
$jwt = JWT::encode($payload, $key, "HS256");

3. 解碼驗證JWT Token

驗證JWT Token的合法性包括兩個方面:1. 驗證簽名是否正確;2. 驗證JWT Token是否過期。示例代碼如下:

$key = "secret_key";
try {
    $decoded = JWT::decode($jwt, $key, array('HS256'));
} catch (Exception $e) {
    // Invalid token
}

三、JMeter加密解密代碼示例

JMeter是一款非常流行的開源壓測工具。在執行壓測場景時,有時需要在HTTP請求頭中添加JWT Token以驗證用戶身份。這時我們需要使用JMeter的JSR223 Sampler來實現JWT的編碼和解碼。示例代碼如下:

1. 添加JSR223 Sampler

在JMeter的測試計劃中添加一個JSR223 Sampler,並選擇語言為Groovy。

2. 編寫Groovy腳本

在JSR223 Sampler中編寫Groovy腳本,示例代碼如下:

import io.jsonwebtoken.*;

def key = "secret_key";
def payload = ['user_id': '123456', 'username': 'John Smith', 'email': 'john.smith@abc.com'];
def token = Jwts.builder().setClaims(payload).signWith(SignatureAlgorithm.HS256, key.getBytes()).compact();
vars.put("jwt_token", token); // 將生成的JWT Token保存到JMeter變數中

3. 在HTTP請求頭中添加JWT Token

在發送HTTP請求時,在請求頭中添加Authorization欄位,並將JWT Token添加到欄位值中。欄位值的格式為”Bearer {jwt_token}”,示例代碼如下:

Authorization: Bearer ${jwt_token}

四、JWT解密代碼示例

在某些情況下,我們需要解密JWT Token以查看其中包含的數據。解密JWT Token需要使用相應的密鑰和演算法。示例代碼如下:

1. 安裝php-jwt庫

同2.1節中描述的方式安裝php-jwt庫。

2. 解密JWT Token

使用JWT::decode()函數解碼JWT Token,示例代碼如下:

use \Firebase\JWT\JWT;
$key = "secret_key";
$decoded = JWT::decode($jwt, $key, array('HS256'));
print_r($decoded);

3. 解密後的結果

解密後的結果為一個PHP對象,包含了JWT Token中的所有數據。示例代碼如下:

stdClass Object
(
    [user_id] => 123456
    [username] => John Smith
    [email] => john.smith@abc.com
    [iat] => 1630616844
    [exp] => 1630703244
)

五、小結

本文詳細介紹了JWT的基本概念、PHP和JMeter中的JWT編碼解碼實現和JWT解密的代碼示例。JWT不僅簡化了服務端存儲和查詢的複雜性,而且更安全和方便。通過本文的學習,相信讀者對JWT有了更深入的理解。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/291171.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-24 13:14
下一篇 2024-12-24 13:14

相關推薦

  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • JWT驗證Token的實現

    本文將從以下幾個方面對JWT驗證Token進行詳細的闡述,包括:JWT概述、JWT驗證Token的意義、JWT驗證Token的過程、JWT驗證Token的代碼實現、JWT驗證Tok…

    編程 2025-04-29
  • JWT String Argument Cannot Be Null or Empty

    JWT(JSON Web Token)是一種用於進行身份驗證的標準。在使用JWT時,經常會遇到「JWT String Argument Cannot Be Null or Empt…

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變數讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25

發表回復

登錄後才能評論