加密

字符串
public static String token(String subject, String secretKey, Date date) {Key key = decodeKey(secretKey);String token = Jwts.builder().setExpiration(date).setSubject(subject).signWith(SignatureAlgorithm.HS256, key).compact();String base64Token = new BASE64Encoder().encode(token.getBytes());base64Token = base64Token.replace('=', '*');base64Token = base64Token.replace("\n", "");base64Token = base64Token.replace("\r", "");return base64Token;
}
多数据
public static String tokenParams(Map<String, Object> claims, String secretKey, Date date) {Key key = decodeKey(secretKey);String token = Jwts.builder().setExpiration(date).setClaims(claims).signWith(SignatureAlgorithm.HS256, key).compact();String base64Token = new BASE64Encoder().encode(token.getBytes());base64Token = base64Token.replace('=', '*');base64Token = base64Token.replace("\n", "");base64Token = base64Token.replace("\r", "");return base64Token;
}

解密

字符串
   public static String verify(String token, String secretKey) {try {token = token.replace('*', '=');Key key = decodeKey(secretKey);String decodeToken = new String(new BASE64Decoder().decodeBuffer(token));String subject = Jwts.parser().setSigningKey(key).parseClaimsJws(decodeToken).getBody().getSubject();return subject;} catch (Exception e) {}return null;
}
多数据
  public static Map<String, Object> verifyParams(String token, String secretKey) {try {token = token.replace('*', '=');Key key = decodeKey(secretKey);String decodeToken = new String(new BASE64Decoder().decodeBuffer(token));Map<String, Object> claims = Jwts.parser().setSigningKey(key).parseClaimsJws(decodeToken).getBody();return claims;} catch (Exception e) {}return null;
}

测试

public static void main(String[] args) {String subject = "A478YSKJDFHJL84673IUASD8";String secretKey = generateSecretKey();Date date = new Date();String strToken = token(subject,secretKey,MyDateUtils.addDays(date,1));System.out.println("There is token result :"+strToken);String verify = verify(strToken,secretKey);System.out.println("There is verify token result :"+verify);Map<String,Object> params = new HashMap<>();params.put("key","value");String objToken = tokenParams(params, secretKey, MyDateUtils.addDays(date, 1));System.out.println("There is token object result :"+objToken);Map<String,Object> verifyObj = verifyParams(objToken,secretKey);System.out.println("There is verify object token result :"+JsonUtils.toJson(verifyObj));
}

测试结果

token过期测试

public static void main(String[] args) {String subject = "A478YSKJDFHJL84673IUASD8";String secretKey = generateSecretKey();Date date = new Date();String strToken = token(subject,secretKey,MyDateUtils.addDays(date,-1));System.out.println("There is token result :"+strToken);String verify = verify(strToken,secretKey);System.out.println("There is verify token result :"+verify);
}

token过期测试结果

全代码

public class JwtUtils {public static String secretKey = "";public static String generateSecretKey() {String secretKey = "";String uuid = new BASE64Encoder().encode(UUID.randomUUID().toString().getBytes());secretKey = uuid;return secretKey;}public static Key generateKey(String secretKey) {Key key = null;try {byte[] keyBytes = new BASE64Decoder().decodeBuffer(secretKey);key = new SecretKeySpec(keyBytes, SignatureAlgorithm.HS256.getJcaName());} catch (Exception e) {e.printStackTrace();}return key;}public static Key decodeKey(String secretKey) {Key key = null;try {byte[] keyBytes = new BASE64Decoder().decodeBuffer(secretKey);key = new SecretKeySpec(keyBytes, SignatureAlgorithm.HS256.getJcaName());} catch (Exception e) {e.printStackTrace();}return key;}public static String tokenParams(Map<String, Object> claims, String secretKey, Date date) {Key key = decodeKey(secretKey);String token = Jwts.builder().setExpiration(date).setClaims(claims).signWith(SignatureAlgorithm.HS256, key).compact();String base64Token = new BASE64Encoder().encode(token.getBytes());base64Token = base64Token.replace('=', '*');base64Token = base64Token.replace("\n", "");base64Token = base64Token.replace("\r", "");return base64Token;}public static Map<String, Object> verifyParams(String token, String secretKey) {try {token = token.replace('*', '=');Key key = decodeKey(secretKey);String decodeToken = new String(new BASE64Decoder().decodeBuffer(token));Map<String, Object> claims = Jwts.parser().setSigningKey(key).parseClaimsJws(decodeToken).getBody();return claims;} catch (Exception e) {e.printStackTrace();}return null;}public static String token(String subject, String secretKey, Date date) {Key key = decodeKey(secretKey);String token = Jwts.builder().setExpiration(date).setSubject(subject).signWith(SignatureAlgorithm.HS256, key).compact();String base64Token = new BASE64Encoder().encode(token.getBytes());base64Token = base64Token.replace('=', '*');base64Token = base64Token.replace("\n", "");base64Token = base64Token.replace("\r", "");return base64Token;}public static String verify(String token, String secretKey) {try {token = token.replace('*', '=');Key key = decodeKey(secretKey);String decodeToken = new String(new BASE64Decoder().decodeBuffer(token));String subject = Jwts.parser().setSigningKey(key).parseClaimsJws(decodeToken).getBody().getSubject();return subject;} catch (Exception e) {e.printStackTrace();}return null;}public static void main(String[] args) {String subject = "A478YSKJDFHJL84673IUASD8";String secretKey = generateSecretKey();Date date = new Date();String strToken = token(subject,secretKey,MyDateUtils.addDays(date,-1));System.out.println("There is token result :"+strToken);String verify = verify(strToken,secretKey);System.out.println("There is verify token result :"+verify);Map<String,Object> params = new HashMap<>();params.put("key","value");String objToken = tokenParams(params, secretKey, MyDateUtils.addDays(date, 1));System.out.println("There is token object result :"+objToken);Map<String,Object> verifyObj = verifyParams(objToken,secretKey);System.out.println("There is verify object token result :"+JsonUtils.toJson(verifyObj));}
}

>>>源码下载链接>>>

java加密算法之JWT篇相关推荐

  1. java加密算法之AES篇

    加密 字符串 public static String encode(String encodeKey,String content){try {KeyGenerator keygen= KeyGen ...

  2. java加密算法之base64篇

    转码 String转码byte数组 public static byte[] encodeStringForByte(String source) {return source == null ? n ...

  3. 对称密钥加密算法 对称轮数_选择Java加密算法第2部分–单密钥对称加密

    对称密钥加密算法 对称轮数 抽象 这是涵盖Java加密算法的三部分博客系列的第2部分. 该系列涵盖如何实现以下功能: 使用SHA–512散列 AES–256 RSA–4096 这第二篇文章详细介绍了如 ...

  4. 选择Java加密算法第2部分–单密钥对称加密

    抽象 这是涵盖Java加密算法的三部分博客系列的第2部分. 本系列介绍如何实现以下目标: 使用SHA–512散列 AES–256 RSA–4096 这第二篇文章详细介绍了如何实现单密钥对称AES-25 ...

  5. 非对称加密 公钥私钥_选择Java加密算法第3部分–公钥/私钥非对称加密

    非对称加密 公钥私钥 抽象 这是涵盖Java加密算法的三部分博客系列的第3部分. 该系列涵盖如何实现以下功能: 使用SHA–512散列 使用AES–256的单密钥对称加密 RSA–4096 这第三篇文 ...

  6. 选择Java加密算法第3部分–公钥/私钥非对称加密

    抽象 这是涵盖Java加密算法的三部分博客系列的第3部分. 本系列介绍如何实现以下目标: 使用SHA–512散列 使用AES–256的单密钥对称加密 RSA–4096 这第三篇文章详细介绍了如何实现非 ...

  7. 各种Java加密算法

    各种Java加密算法 您的评价:           如基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要 ...

  8. java加密算法入门(三)-非对称加密详解

    1.简单介绍 这几天一直在看非对称的加密,相比之前的两篇内容,这次看了两倍多的时间还云里雾里的,所以这篇文章相对之前的两篇,概念性的东西多了些,另外是代码的每一步我都做了介绍,方便自己以后翻阅,也方便 ...

  9. 一点一点看JDK源码(五)java.util.ArrayList 后篇之forEach

    一点一点看JDK源码(五)java.util.ArrayList 后篇之forEach liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 代 ...

  10. 步步理解 JAVA 泛型编程 – 共三篇

    http://learning.iteye.com/blog/1295901 FROM: http://unmi.cc/understand-java-generic-3 步步理解 JAVA 泛型编程 ...

最新文章

  1. 各种 Optimizer 梯度下降优化算法总结
  2. 月薪40-60k| 银牛微电子Inuitive招计算机视觉算法、应用软件等岗位
  3. 知乎李大海对话阿里云贾扬清:透视AI应用难题与未来趋势
  4. 冒号课堂§4.3:汇总范式
  5. 浅析jQuery的链式调用 之 each函数
  6. orcal 数据库 maven架构 ssh框架 的全xml环境模版 及常见异常解决
  7. 摘自《读者》的哲理短句——赞美篇
  8. python数据读取失败无法启动应用_tensorflow初学者教程-读取数据集失败
  9. 相机下载_索尼黑卡相机与手机互联APP相关
  10. php 实现百度文库搭建
  11. 6.Java 面试题整理(XML)
  12. C# 读取Execl和Access数据库
  13. 【安全牛学习笔记】COCAT
  14. nginx重写与重定向区别_nginx学习十一 rewrite url重写以及重定向
  15. java基础语法day03
  16. 安装biztalk2006后导致QuickStartV20不正常
  17. SAS (Statistics Analysis System) 统计分析系统软件
  18. 单服务器高性能:PPC、TPC、epoll、Reactor、Proactor
  19. JavaScript特效——让文字每秒钟进行变色
  20. Cisco(思科)远程登录交换机

热门文章

  1. Python-Numpy语法总结-数组的创建
  2. html编写在线打字通,金山打字在线练习版 怎么修改金山打字通打字速度?
  3. 深信服(scsa认证)学习过程
  4. Python多线程实例
  5. mysql官网下载驱动包
  6. 多智能体MAPPO代码环境配置以及代码讲解
  7. 利用模板导出文件(一)之XLSTransformer导出excel文件
  8. 分享思路:Python+Spark爬虫音乐推荐系统 音乐数据分析可视化 音乐推荐app 音乐网站 大数据毕业设计(app+web+爬虫+spark+可视化)
  9. 总结——达内视频(二)
  10. matlab r2014a 序列号,Matlab R2014a 免费版