80 lines
2.6 KiB
Java
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");
|
|
}
|
|
}
|