使用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.mzph.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 从中序与后序遍历序…