jwt 加密和解密demo
jwt 加密和解密demo
JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用 JWT 在用户和服务器之间传递安全可靠的信息。
导入jar
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.10.5</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.10.5</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.10.5</version>
<scope>runtime</scope>
</dependency>
JWTTest.java
package com.example.demo.jwt; import io.jsonwebtoken.*;
import io.jsonwebtoken.security.Keys; import java.security.Key;
import java.util.Date;
import java.util.UUID; /**
* JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用 JWT 在用户和服务器之间传递安全可靠的信息。
* https://jwt.io/
* https://www.cnblogs.com/moonlightL/p/10020732.html
*/
public class JWTTest { public static void main(String[] args) {
Key key = Keys.secretKeyFor(SignatureAlgorithm.HS256);
System.out.println("=============创建 JWT===========");
Date now = new Date();
JwtBuilder builder= Jwts.builder()
.setId(UUID.randomUUID().toString()) // 载荷-标准中注册的声明
.setSubject("admin") // 载荷-标准中注册的声明
.setIssuedAt(now) // 载荷-标准中注册的声明,表示签发时间
.claim("id", "123456") // 载荷-公共的声明
.claim("name", "MoonlightL") // 载荷-公共的声明
.claim("sex", "male") // 载荷-公共的声明
.signWith(key); // 签证 String jwt = builder.compact();
System.out.println("生成的 jwt :" +jwt); System.out.println("=============解析 JWT===========");
try {
Jws<Claims> result = Jwts.parser().setSigningKey(key).parseClaimsJws(jwt);
// 以下步骤随实际情况而定,只要上一行代码执行不抛异常就证明 jwt 是有效的、合法的
Claims body = result.getBody();
System.out.println("载荷-标准中注册的声明 id:" + body.getId());
System.out.println("载荷-标准中注册的声明 subject:" + body.getSubject());
System.out.println("载荷-标准中注册的声明 issueAt:" + body.getIssuedAt());
System.out.println("载荷-公共的声明的 id:" + result.getBody().get("id"));
System.out.println("载荷-公共的声明的 name:" + result.getBody().get("name"));
System.out.println("载荷-公共的声明的 sex:" + result.getBody().get("sex"));
} catch (JwtException ex) { // jwt 不合法或过期都会抛异常
ex.printStackTrace();
} }
}
JWTTest2.java
package com.example.demo.jwt; import io.jsonwebtoken.*;
import io.jsonwebtoken.security.Keys; import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
import java.security.Key;
import java.util.Date;
import java.util.UUID; /**
* 报错信息解决:
* io.jsonwebtoken.security.WeakKeyException: The signing key's size is 96 bits which is not secure enough for the HS256 algorithm. The JWT JWA Specification (RFC 7518, Section 3.2) states that keys used with HS256 MUST have a size >= 256 bits (the key size must be greater than or equal to the hash output size). Consider using the io.jsonwebtoken.security.Keys class's 'secretKeyFor(SignatureAlgorithm.HS256)' method to create a key guaranteed to be secure enough for HS256. See https://tools.ietf.org/html/rfc7518#section-3.2 for more information.
* 将JWS_SECRET key的长度加长。
*/
public class JWTTest2 {
private static final String JWS_SECRET = "fsfsfsfs1211212fdsfsfsdfsfsfsfsfsfaaaaeweweewsssssssssssssss";
private static final String JWS_BODY_KEY = "jwtTxt"; public static void main(String[] args) {
String jwt = "";
try {
System.out.println("=============创建 JWT===========");
String json = "你好中国2022"; //可以考虑存储为json字符串
SignatureAlgorithm sa = SignatureAlgorithm.HS256;
byte[] ksBytes = DatatypeConverter.parseBase64Binary(JWS_SECRET);
Key signKey = new SecretKeySpec(ksBytes, sa.getJcaName());
JwtBuilder builder = Jwts.builder().setHeaderParam("typ", "JWT")
.claim(JWS_BODY_KEY, json)
.signWith(sa, signKey);
jwt = builder.compact();
System.out.println("生成的 jwt :" +jwt);
} catch (Exception e) {
e.printStackTrace();
} System.out.println("=============解析 JWT==========="); try {
Jws<Claims> jws = Jwts.parser().setSigningKey(DatatypeConverter.parseBase64Binary(JWS_SECRET)) .parseClaimsJws(jwt.trim());
Claims body = jws.getBody();
Object jbk = body.get(JWS_BODY_KEY);
System.out.println("content=" + jbk.toString().trim());
} catch (Exception e) {
e.printStackTrace();
} }
}
运行效果图及验证:

访问地址: https://jwt.io/#debugger

jwt 加密和解密demo的更多相关文章
- JWT加密解密
如何保证WebAPI的安全?1.JWT加密解密.token2.使用https传输协议.3.把用户所有请求的参数信息加上一个只有服务器端知道的secret,做个散列运算,然后到了服务器端,服务器端也做一 ...
- CA数字加密解密Demo
package aisin.text; import com.google.common.collect.Maps; import sun.misc.BASE64Decoder; impor ...
- AES —— JAVA中对称加密和解密
package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingException; impo ...
- iOS,一行代码进行RSA、DES 、AES、MD5加密、解密
本文为投稿文章,作者:Flying_Einstein(简书) 加密的Demo,欢迎下载 JAVA端的加密解密,读者可以看我同事的这篇文章:http://www.jianshu.com/p/98569e ...
- AES对称加密和解密
package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingException; impo ...
- java代码实现对excel加密、解密(设置或去除打开密码)
使用jxcell组件来完成对excel加密.解密的功能. jxcell.jar[点击下载](此jar没有使用限制,你懂得) 具体代码如下: import java.io.IOException; im ...
- DES加密和解密PHP,Java,ObjectC统一的方法
原文:DES加密和解密PHP,Java,ObjectC统一的方法 PHP的加解密函数 <?php class DesComponent { var $key = '12345678'; func ...
- base64随机字符混淆加密、解密-美拍视频地址解密,反推加密算法
用火车头测试采集美拍的数据时无意中发现美拍的视频地址是一段加了混淆字符串的base64代码.如下图 于是好奇之下研究了下解密算法.具体过程省略800字.发现美拍的视频解密是通过js完成,于是找到了具体 ...
- Java加密与解密笔记(四) 高级应用
术语列表: CA:证书颁发认证机构(Certificate Authority) PEM:隐私增强邮件(Privacy Enhanced Mail),是OpenSSL使用的一种密钥文件. PKI:公钥 ...
- php中加密和解密
项目要和第三方进行接口对接,所以数据的安全很重要.第一次自己设计并实现,学习记录下 网上查了很多资料,真的很深奥 对称加密: 双方共用一个约定好的密钥进行数据的加密和解密,但是当密匙丢失,数据将有泄露 ...
随机推荐
- [MySQL] 原生全文检索 fulltext 的简单应用
在目标字段上添加全文检索:alter table 表名 add fulltext(字段) with parser ngram 查询语句:select * from xxx where match(字段 ...
- EasyRepro与测试自动化( 一) 概览
EasyRepro是一个框架,允许在特定的Dynamics 365组织上执行自动化UI测试.你可以使用它来自动化冒烟测试.回归测试和负载测试等.该框架是由开源项目Selenium构建的,Seleniu ...
- 使用qemu运行risc-v ubuntu
参考 Ubuntu installation on a RISC-V virtual machine using a server install image and QEMU 用到的文件 fw_ju ...
- Go语言—值类型和引用类型
一.值类型 定义 变量直接存储的值,内存通常在栈中分配: var i = 5 -> i-->5 应用 int.float.bool.string.数组.struct 二.引用类型 1. 定 ...
- fastposter 2.1.1 紧急版本发布 电商级海报生成器
fastposter 2.1.1 紧急版本发布 电商级海报生成器 fastposter低代码海报生成器,一分钟完成海报开发.支持Java Python PHP Go JavaScript等多种语言. ...
- postgresql用sql查询表结构
查询sql如下: SELECT a.attname AS field, t.typname AS type, CASE WHEN t.typlen = -1 THEN a.atttypmod - 4 ...
- 阿克曼函数(Ackermann function)部分推导
相关题目 已知\(Ackermann function\)为 \[Ack(m,n)=\begin{cases}n+1(m=0) \\ Ack(m-1,1)(m>0,n=0) \\ Ack(m-1 ...
- 智能调度_AIRIOT智能车队管理解决方案
客运.货运.汽车租赁.出租运营等行业对车辆管理.车队管理以及司乘人员的管理方式,逐渐向数字化和智能化转型.传统的依赖人工调度.记录和跟踪的管理模式已经难以满足业务发展需要,存在如下痛点: 实时监控与定 ...
- C# Bitmap 在winform里编辑了,再次重新编辑,报gdi+错误解决办法
经过排查,var bitmap=new Bitmap()这个局部对象,没有Dispose所致.虽然是局部的对象,但还是需要Dispose:
- 鸿蒙HarmonyOS实战-Stage模型(进程模型)
前言 进程是计算机中运行的程序的实例.它是操作系统对正在执行的程序的一种抽象概念.每个进程都有自己的独立内存空间.运行状态和执行上下文.进程可以包含一个或多个线程,每个线程可以独立执行一部分任务.操作 ...