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中加密和解密
项目要和第三方进行接口对接,所以数据的安全很重要.第一次自己设计并实现,学习记录下 网上查了很多资料,真的很深奥 对称加密: 双方共用一个约定好的密钥进行数据的加密和解密,但是当密匙丢失,数据将有泄露 ...
随机推荐
- 快速上手 Serverless | 入门第一课
简介: 本文从云计算抛砖引玉,详解 Serverless 的典型应用场景和一些产品介绍. 一. 从云计算到 Serverless 自世界上第一台通用计算机 ENIAC (图左)诞生以来,计算机科学与技 ...
- WSL2使用桥接网络,并指定IP
前言 微软终于解决了宇宙级难题了,一直以来的WSL2每次启动IP都是动态分配的,并且是NAT的网络.当然网上对此也有一些解决方案,编写脚本在启动时修改,但是太麻烦了,这次很完美的解决了这个难题. 检查 ...
- gitignore文件不生效的问题解决
如何添加 git的忽略文件 .gitignore 在使用git过程中,我们可能有些文件不需要上传上去,比如一些缓存文件,生成的图片,运行环境的一些配置等等,这时就需要用到.gitignore忽略掉这些 ...
- 在jeecg-boot中使用代码生成器&mybatis-plus
一.代码生成器代码生成器-->jeecgOneGUI配置文件:resource/jeecg/jeecg_config.properties,修改目标生成的路径和包名数据库连接:resource/ ...
- GESP 202312 游记
day 0 把一本通上的指针扫了一遍,睡觉! day 1 9:00入场,在第二个考场. 冲进昌平二中,码了Hello,World!. 9:30发网址,开题 监考老师居然说阅读程序题可以打代码!···· ...
- 让AnaTraf成为您网络流量分析的最佳利器
在快速发展的数字时代,企业对网络性能的监测与分析需求愈加旺盛.作为网络性能监测与诊断(NPMD)领域的佼佼者,AnaTraf网络流量分析仪凭借其出色的性能和易用性,正成为网络管理人员的首选工具. An ...
- JDK源码阅读-------自学笔记(八)(数组演示冒泡排序和二分查找)
冒泡排序 算法 比较相邻的元素.如果第一个比第二个大,就交换他们两个 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数 针对所有的元素重复以上的步骤,除 ...
- Intel HDSLB 高性能四层负载均衡器 — 基本原理和部署配置
前言 在上一篇<Intel HDSLB 高性能四层负载均衡器 - 快速入门和应用场景>中,我们着重介绍了 HDSLB(High Density Scalable Load Balancer ...
- WPF之单例模式
项目 2019/10/09 问题 2019年10月9日星期三 上午2:46 1.为了实现单例模式,在App类中添加了如下代码,使用了信号量,但是为什么返回;isNew一直为true public ...
- 解决老旧电脑在win7中浏览器访问https网站出现的Let‘sEncrypt证书过期的问题
原因LetsEncrypt证书未过期,但是其顶级ca根证书 "DST Root CA X3"在2021-09-01过期了,老旧设备上的win系统会被影响到. 解决步骤下载三张Let ...