使用es256算法生成jwt

1、使用hutool來做

1、先去jwt解密/加密 - bejson在線工具弄個公私鑰

2、導入hutool maven

 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.22</version></dependency><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15to18</artifactId><version>1.68</version></dependency>

3、代碼

public class JwtUtil {public static void main(String[] args) {System.out.println("jwt:" + genEs256Jwt("123"));}static String es256PrimaryKey = "xxx";static String es256PublicKey = "xxx";// 生成jwt@SneakyThrowspublic static String genEs256Jwt(String username){byte[] privateKeyBytes = Base64.decode(es256PrimaryKey);KeyFactory keyFactory = KeyFactory.getInstance("EC");PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes);PrivateKey privateKey = keyFactory.generatePrivate(keySpec);JWTSigner signer = JWTSignerUtil.es256(privateKey);String token = JWT.create().setPayload("username", username).setPayload("iss", "xxx")// 簽發時間.setPayload("timeStamp",new Date().getTime()).setKey(secret).setSigner(signer).sign();}

4、解密

@SneakyThrowspublic static String parseEs256Jwt(String token){Security.addProvider(new BouncyCastleProvider());KeyFactory keyFactory = KeyFactory.getInstance("ECDH", "BC");byte[] publicKeyBytes = Base64.decode(es256PublicKey);X509EncodedKeySpec pubX509 = new X509EncodedKeySpec(publicKeyBytes);PublicKey publicKey = keyFactory.generatePublic(pubX509);JWTSigner signer = JWTSignerUtil.es256(publicKey);JWT jwt = JWT.of(token).setSigner(signer);return jwt.getPayload("username").toString();}

5、ps:hutool的在jwt解密/加密 - bejson在線工具上校驗不過去,只能自己和自己校驗玩

2、使用io.jsonwebtoken(推薦)

1、導入maven

<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-impl</artifactId><version>0.11.1</version></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.11.1</version></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-jackson</artifactId><version>0.11.1</version></dependency>

2、代碼

@SneakyThrowspublic static String genEs256Jwt(String username){Security.addProvider(new BouncyCastleProvider());byte[] privateKeyBytes = Base64.decode(es256PrimaryKey);
//        KeyFactory keyFactory = KeyFactory.getInstance("EC");KeyFactory keyFactory = KeyFactory.getInstance("ECDH", "BC");PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes);PrivateKey privateKey = keyFactory.generatePrivate(keySpec);Claims claims = Jwts.claims();claims.put("username", username);String token = Jwts.builder().setClaims(claims).setIssuer("xxx").signWith(privateKey,SignatureAlgorithm.ES256)
//                .signWith(privateKey, SignatureAlgorithm.ES256).compact();return token;}

3、解密

    @SneakyThrowspublic static String parseEs256Jwt(String token){Security.addProvider(new BouncyCastleProvider());KeyFactory keyFactory = KeyFactory.getInstance("ECDH", "BC");byte[] publicKeyBytes = Base64.decode(es256PublicKey);X509EncodedKeySpec pubX509 = new X509EncodedKeySpec(publicKeyBytes);PublicKey publicKey = keyFactory.generatePublic(pubX509);Jws<Claims> jwt = null;String username = null;try {jwt = Jwts.parserBuilder().setSigningKey(publicKey).build().parseClaimsJws(token);username = jwt.getBody().get("username").toString();} catch (ExpiredJwtException e) {e.printStackTrace();} catch (UnsupportedJwtException e) {e.printStackTrace();} catch (MalformedJwtException e) {e.printStackTrace();} catch (SignatureException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();}return username;}

參考:JWT Token 使用 RS256 和 ES256 簽名_jwt解碼es256解密-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210009.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210009.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210009.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高項備考葵花寶典-項目進度管理輸入、輸出、工具和技術(中,很詳細考試必過)

項目進度管理的目標是使項目按時完成。有效的進度管理是項目管理成功的關鍵之一&#xff0c;進度問題在項目生命周期內引起的沖突最多。 小型項目中&#xff0c;定義活動、排列活動順序、估算活動持續時間及制定進度模型形成進度計劃等過程的聯系非常密切&#xff0c;可以視為一…

Pytorch中的resize和reshape

torch.reshape() 官方文檔的大致意思是&#xff1a; 返回與輸入具有相同數據和元素數量的張量&#xff0c;但是具有指定形狀。如果可能&#xff0c;返回的張量將是輸入的視圖&#xff0c;也就是說原本的tensor并沒有被改變&#xff0c;如果想要改變那么就將改變的tensor賦值給…

情深不必糾纏

那一年&#xff0c;男孩女孩在萬千人中相遇了。多年后女人的一封郵件&#xff0c;讓男人與女人的靈魂相遇了。他們無緣夫妻&#xff0c;卻發現彼此是靈魂的陪伴。不能攜手相守&#xff0c;卻懂得彼此的心靈。 有一天&#xff0c;女人告訴男人要回家了&#xff0c;問男人心里會不…

ejs —— 三目運算符的用法

EJS&#xff08;Embedded JavaScript&#xff09;是一種簡單的模板語言&#xff0c;它允許將JavaScript代碼嵌入到HTML中。在EJS中&#xff0c;<%、<%和<%-是用于將JavaScript代碼嵌入到模板中的語法。 <%&#xff1a;這是EJS的輸出表達式&#xff0c;用于將變量的…

阿里云安裝docker

文章目錄 一、 yum 進行安裝&#xff08;os版本 CentOS 7&#xff09; 推薦二、 apt-get 進行安裝(os版本 Ubuntu 14.04/16.04&#xff09;三、測試四、阿里云docker加速 一、 yum 進行安裝&#xff08;os版本 CentOS 7&#xff09; 推薦 # step 1: 安裝必要的一些系統工具 su…

<HarmonyOS第一課>應用服務上架【課后考核】

【習題】HarmonyOS應用/元服務上架 判斷題 元服務發布的國家與地區僅限于“中國大陸” 正確(True) 編譯打包的軟件包存放在項目目錄build > outputs > default下 正確(True) 單選題 創建應用時&#xff0c;應用包名需要和app.json5或者config.json文件中哪個字段保持…

VMware安裝Ubuntu20.04并使用Xshell連接虛擬機

文章目錄 虛擬機環境準備重置虛擬網絡適配器屬性&#xff08;可選&#xff09;配置NAT模式的靜態IP創建虛擬機虛擬機安裝配置 Xshell連接虛擬機 虛擬機環境準備 VMware WorkStation Pro 17.5&#xff1a;https://customerconnect.vmware.com/cn/downloads/details?downloadGr…

基于Java旅游信息管理系統

基于Java旅游信息管理系統 功能需求 1、旅游目的地管理&#xff1a;系統需要能夠記錄和管理各個旅游目的地的詳細信息&#xff0c;包括景點介紹、交通方式、住宿推薦等。管理員可以添加、編輯和刪除目的地信息。 2、旅游線路規劃&#xff1a;系統需要提供旅游線路規劃功能&a…

C++類名后面跟大括號和跟小括號的區別

在 C 中&#xff0c;類名后面跟著大括號 {} 和小括號 () 有不同的含義和作用。 大括號 {}&#xff1a; 初始化對象&#xff1a;當在聲明類對象時使用大括號 {} 時&#xff0c;這表示對對象進行初始化。這種方式也稱為列表初始化或者統一初始化。示例&#xff1a;MyClass obj{};…

網上下載的pdf文件,為什么不能復制文字?

不知道大家有沒有到過這種情況&#xff1f;在網上下載的PDF文件打開之后&#xff0c;發現選中文字之后無法復制。甚至其他功能也都無法使用&#xff0c;這是怎么回事&#xff1f;該怎么辦&#xff1f; 當我們發現文件打開之后&#xff0c;編輯功能無法使用&#xff0c;很可能是…

AlexNet

概念 過擬合:根本原因是特征維度過多&#xff0c;模型假設過于復雜&#xff0c;參數過多&#xff0c;訓練數據過少&#xff0c;噪聲過多&#xff0c;導致擬合的函數完美的預測訓練集&#xff0c;但對新數據的測試集預測結果差。 過度的擬合了訓練數據&#xff0c;而沒有考慮到…

29、卷積 - 參數 padding 的作用

在卷積過程中,Padding(填充)是一個關鍵的概念,它對于保留輸入信息和有效地處理邊緣信息至關重要。 1、Padding是什么? Padding 指的是在輸入圖像的周圍添加額外的像素值,用來以擴大輸入圖像的尺寸,這些額外填充的像素值通常設置為零,卷積操作在這個填充后的輸入圖像上…

C#基礎-結構體應用實例

目錄 定義 結構有以下特點 用法實例 定義 在 C# 中,結構體是值類型數據結構。它使得一個單一變量可以存儲各種數據類型的相關數據。struct 關鍵字用于創建結構體。 結構有以下特點 結構可帶有方法、字段、索引、屬性

2024年生成式人工智能發展預測

2024年生成式人工智能發展預測 2023.12.9版權聲明&#xff1a;本文為博主chszs的原創文章&#xff0c;未經博主允許不得轉載。 當前&#xff0c;生成式人工智能&#xff08;Generative AI&#xff0c;后面簡稱 Gen AI&#xff09;領域不但在持續演進&#xff0c;而且它正在徹…

ThinkPHP生活用品商城系統

有需要請加文章底部Q哦 可遠程調試 ThinkPHP生活用品商城系統 一 介紹 此生活用品商城系統基于ThinkPHP框架開發&#xff0c;數據庫mysql&#xff0c;前端bootstrap。系統分為用戶和管理員。(附帶配套設計文檔) 技術棧&#xff1a;ThinkPHPmysqlbootstrapphpstudyvscode 二 …

MYSQL主從復制配置指引

MYSQL主從復制配置指引 1.前期準備 部署完主備數據庫&#xff0c;初始化主備庫表結構和數據。 2. 主庫配置修改 修改主庫配置文件etc/my.cnf&#xff0c;新增以下配置&#xff1a; #服務器 id&#xff0c;需唯一 server-id 1 #二進制文件存放路徑 log-bin mysql-bin …

深入理解JavaScript的箭頭函數

深入理解JavaScript的箭頭函數 在ES6中&#xff0c;JavaScript引入了箭頭函數的概念&#xff0c;它提供了一種更簡潔的語法來定義匿名函數。雖然箭頭函數看起來很簡單&#xff0c;但它們在實際應用中有一些獨特的特性和行為。讓我們深入理解箭頭函數并學習如何正確地使用它們。…

記賬中心二開

系統預設了 這幾種 FSubSystem 為子系統 T_VC_SubSystem 卡片顯示的表 字段 FNeedRalteAccount 設置為1的話 &#xff0c;需要與總賬連用系統將去查找 系統狀態控制表。 如果系統狀態 沒有配置這個子系統 將無法顯示數據 select sysStaCtr.fid from T_BD_SystemStatusCt…

MySQL:drop、delete與truncate區別

一、用法不同 1、drop(丟棄數據): drop table 表名 &#xff0c;直接將表都刪除掉&#xff0c;在刪除表的時候使用。 2、truncate (清空數據) : truncate table 表名 &#xff0c;只刪除表中的數據&#xff0c;再插入數據的時候自增長 id 又從 1 開始&#xff0c;在清空表中數…

Java LeetCode篇-深入了解二叉樹的經典解法(多種方式實現:構造二叉樹)

&#x1f525;博客主頁&#xff1a; 【小扳_-CSDN博客】 ?感謝大家點贊&#x1f44d;收藏?評論? 文章目錄 1.0 從前序與中序遍歷序列來構造二叉樹 1.1 實現從前序與中序遍歷序列來構造二叉樹思路 1.2 代碼實現從前序與中序遍歷序列來構造二叉樹 2.0 從中序與后序遍歷序…