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 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 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 keyMap = RsaKeyUtil.generateKey("123456"); } }