下面我来演示一下自己是如何将我们的token解码,以及在我们只有秘钥时,如何将秘钥转换得到我们想要的值
token的创建
/** * 秘钥用于signature(签名)部分的加密和解密 */ private static final String KEY="nf-it"; /** * 签发者 */ private static final String ISS = "nf"; /** * 创建 token * @param claims 数据载体 * @param ttl token的过期时间 * @return */ public static String createToken(Map<String,Object> claims,long ttl){ JwtBuilder builder = Jwts.builder() //获取签名秘钥,并采取HS256的加密算法进行签名 .signWith(SignatureAlgorithm.HS256,KEY) //jwt唯一标识 .setId(UUID.randomUUID().toString()) //设置数据内容 .setClaims(claims) //设置签发人 .setSubject(ISS) //主题 .setSubject("JWT AUTH") //签发时间 .setIssuedAt(new Date()); //设置过期时间 if (ttl >0){ builder.setExpiration(getExpDate(ttl)); } //创建jwt字符串并返回 return builder.compact(); }
token的解密
当我们输入token和map中的uid,和我们的类型就能进行解密
public static <T> T getPayload(String token,String name,Class<T> type){ return Jwts.parser() //解密 .setSigningKey(KEY) //解析token中的数据载体部分 .parseClaimsJws(token) //取出载体数据 .getBody() //根据name和type取出相应的value .get(name,type); }
Base64可以进行解密以及编码
但是可以解token的秘钥
byte[] a = Base64.getDecoder().decode("eyJ1aWQiOjEwMDEsInN1YiI6IkpXVCBBVVRIIiwiaXNzIjoibmYiLCJleHAiOjE2NjY4NTU1NTYsImlhdCI6MTY2Njg1NTQzNn0"); String msg = new String(a); System.out.println(msg);
public static void main (String[] args) {
// 使用基本型的编码器和解码器 对数据进行编码和解码
// 1.获取编码器
Base64.Encoder encoder = Base64.getEncoder();
// 2.对字符串进行编码
String str = "name=zhangsan&password==123456";
String s = encoder.encodeToString(str.getBytes());
// 3.输出编码后的字符串
System.out.println("编码后的字符串:" + s);
// 4.获取解码器
Base64.Decoder decoder = Base64.getDecoder();
// 5.对编码后的字符串进行解码
byte[] decode = decoder.decode(s);
String s1 = new String(decode);
// 6.打印输出解码后的字符串
System.out.println("解码后的字符串:" + s1);
————————————————
版权声明:本文为CSDN博主「肥兄」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_60489526/article/details/120118912