2024-11-29 10:49:32 +08:00

80 lines
2.6 KiB
Java

package com.ycwl.basic.utils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import java.io.IOException;
import java.security.*;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
/**
* @author yangchen
*/
@SuppressWarnings("ALL")
public class RsaKeyUtil {
public RsaKeyUtil() {
}
public static PublicKey getPublicKey(byte[] publicKey) throws Exception {
X509EncodedKeySpec spec = new X509EncodedKeySpec(publicKey);
return KeyFactory.getInstance("RSA").generatePublic(spec);
}
public static PrivateKey getPrivateKey(byte[] privateKey) throws Exception {
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(privateKey);
return KeyFactory.getInstance("RSA").generatePrivate(spec);
}
public static Map<String, byte[]> generateKey(String password) throws IOException, NoSuchAlgorithmException {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
SecureRandom secureRandom = new SecureRandom(password.getBytes());
keyPairGenerator.initialize(1024, secureRandom);
KeyPair keyPair;
byte[] publicKeyBytes = (keyPair = keyPairGenerator.genKeyPair()).getPublic().getEncoded();
byte[] privateKeyBytes = keyPair.getPrivate().getEncoded();
HashMap map;
(map = new HashMap()).put("pub", publicKeyBytes);
map.put("pri", privateKeyBytes);
return map;
}
public static String toHexString(byte[] b) {
return Base64.getEncoder().encodeToString(b);
}
public static final byte[] toBytes(String s) throws IOException {
return Base64.getDecoder().decode(s);
}
public static Jws<Claims> parserToken(String token, byte[] pubKey) throws Exception {
return Jwts.parser().setSigningKey(RsaKeyUtil.getPublicKey(pubKey)).parseClaimsJws(token);
}
/**
* 测试类
*
* @param args
* @throws NoSuchAlgorithmException
*/
public static void main(String[] args) throws Exception {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
SecureRandom secureRandom = new SecureRandom("123".getBytes());
keyPairGenerator.initialize(1024, secureRandom);
KeyPair keyPair = keyPairGenerator.genKeyPair();
System.out.println(keyPair.getPublic().getEncoded());
System.out.println("====");
/**
* 生成公私密钥
*/
Map<String, byte[]> keyMap = RsaKeyUtil.generateKey("123456");
}
}