jwt 简介(java)

本文介绍了JWT在Java环境中的应用,包括使用openssl生成密钥对,讲解了私钥和公钥的PEM格式,以及如何在Java中进行加解密操作。同时,文章还提及了jjwt库在JWT生成中的使用。
摘要由CSDN通过智能技术生成

jwt 简介(java)

提示:jwt的相关概念,基本原理,常用命令及java实现。



一、openssl生成密钥对

生成私钥

openssl genrsa -out privatekey.pem 2048

生成公钥

openssl genrsa -out privatekey.pem 2048

privatekey.pem

-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAwLH3uWZ9Y5kn5+hSV2hcUrArmUDWjHhFuAWOhBZQgsg2yabf
......
ytTGE0j3mjQDA8NzRinHqkgGpOrM6dbo4MnfddAOkYGFwx959xIYv9o=
-----END RSA PRIVATE KEY-----

publickey.pem

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwLH3uWZ9Y5kn5+hSV2hc
......
AddsYG2Xt+IB3KWzqfRYMZTWKoQ0cMPyc3KZWL3u0JZKjly/IX9vzKJkZyh9zGgF
0wIDAQAB
-----END PUBLIC KEY-----

pem的三种格式
PKCS#1 PEM (-----BEGIN RSA PRIVATE KEY-----)
PKCS#8 PEM (-----BEGIN PRIVATE KEY-----)
PKCS#8 DER (binary)

openssl pkcs8 -in key.pem -topk8 -nocrypt -out pk8key.pem

二、java读取并使用密钥进行加解密

package com.example.demo;

import javax.crypto.Cipher;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.security.GeneralSecurityException;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Arrays;
import java.util.Base64;

public class RSADemo {
   

    private static final String PKCS_1_PEM_HEADER = "-----BEGIN RSA PRIVATE KEY-----";
    private static final String PKCS_1_PEM_FOOTER = "-----END RSA PRIVATE KEY-----";
    private static final String PKCS_8_PEM_HEADER = "-----BEGIN PRIVATE KEY-----";
    private static final String PKCS_8_PEM_FOOTER = "-----END PRIVATE KEY-----";

    private static final String PUBLIC_HEADER = "-----BEGIN PUBLIC KEY-----";
    private static final String PUBLIC_FOOTER = "-----END PUBLIC KEY-----";

    private static final String privateKeyPath = "src/main/resources/static/privatekey.txt";
    private static final String publicKeyPath = "src/main/resources/static/publickey.txt";

    public static String readFile(String path) throws IOException {
   
        BufferedReader fis = 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JWT(JSON Web Token)是一种用于安全地传输信息的开放标准。它可以通过数字签名验证消息的可靠性和完整性,从而保证数据在传输过程中不会被篡改。在Java中,我们可以使用一些开源库来处理JWT,比如jjwt、nimbus-jose-jwt等。 以下是一个使用jjwt库创建和解析JWT的示例代码: 创建JWT: ```java import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import java.util.Date; public class JwtUtil { private static final String SECRET_KEY = "mySecretKey"; // 用于生成签名的密钥 public static String generateToken(String subject, long expirationMillis) { Date now = new Date(); Date expiration = new Date(now.getTime() + expirationMillis); return Jwts.builder() .setSubject(subject) .setIssuedAt(now) .setExpiration(expiration) .signWith(SignatureAlgorithm.HS256, SECRET_KEY) .compact(); } } ``` 解析JWT: ```java import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; public class JwtUtil { private static final String SECRET_KEY = "mySecretKey"; // 用于生成签名的密钥 public static String parseToken(String token) { Claims claims = Jwts.parser() .setSigningKey(SECRET_KEY) .parseClaimsJws(token) .getBody(); return claims.getSubject(); } } ``` 在上面的代码中,我们首先定义了一个SECRET_KEY作为生成签名的密钥。然后,我们使用Jwts.builder()方法创建一个JWT,设置了JWT的主题、发行时间和过期时间,并使用HS256算法生成签名。最后,我们使用Jwts.parser()方法来解析JWT,验证签名,并获取JWT中包含的主题信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值