diff --git a/boot-starter/boot-starter-util/src/main/java/com/micro/fast/util/RSAUtil.java b/boot-starter/boot-starter-util/src/main/java/com/micro/fast/util/RSAUtil.java new file mode 100644 index 0000000..1399e98 --- /dev/null +++ b/boot-starter/boot-starter-util/src/main/java/com/micro/fast/util/RSAUtil.java @@ -0,0 +1,85 @@ +package com.micro.fast.util; + +import org.apache.commons.net.util.Base64; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import java.io.UnsupportedEncodingException; +import java.security.*; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; + +/** + * 添加rsa加解密工具类 + * + * @author lsy + */ +public class RSAUtil { + + public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException, InvalidKeySpecException { + String[] keys = keys(); + String encode = jdkRSA(keys[1], "2018-1-1 2018-12-30"); + System.out.println("使用私钥加密后的内容为:"+encode); + String decode = deJdkRSA(keys[0], encode); + System.out.println("使用公钥解密后的内容为:"+decode); + } + + /** + * 生成公钥私钥 + * @return + * @throws NoSuchAlgorithmException + */ + public static String[] keys() throws NoSuchAlgorithmException { + KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); + keyPairGenerator.initialize(512); + KeyPair keyPair = keyPairGenerator.generateKeyPair(); + RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic(); + RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate(); + return new String[]{Base64.encodeBase64String(rsaPublicKey.getEncoded()),Base64.encodeBase64String(rsaPrivateKey.getEncoded())}; + } + + /** + * 私钥加密内容 + * @param rsaPrivateKey + * @param content + * @return + * @throws NoSuchAlgorithmException + * @throws InvalidKeySpecException + * @throws NoSuchPaddingException + * @throws InvalidKeyException + * @throws UnsupportedEncodingException + * @throws BadPaddingException + * @throws IllegalBlockSizeException + */ + public static String jdkRSA(String rsaPrivateKey, String content) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, UnsupportedEncodingException, BadPaddingException, IllegalBlockSizeException { + PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(rsaPrivateKey)); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec); + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.ENCRYPT_MODE, privateKey); + byte[] result = cipher.doFinal(content.getBytes("UTF-8")); + content = Base64.encodeBase64String(result); + return content; + } + + /** + * 使用公钥解密内容 + * @param rsaPublicKey + * @param content + * @return + */ + public static String deJdkRSA(String rsaPublicKey, String content) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeySpecException, InvalidKeyException, UnsupportedEncodingException, BadPaddingException, IllegalBlockSizeException { + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + Cipher cipher = Cipher.getInstance("RSA"); + X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Base64.decodeBase64(rsaPublicKey)); + PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec); + cipher.init(Cipher.DECRYPT_MODE, publicKey); + byte[] result = cipher.doFinal(Base64.decodeBase64(content)); + return new String(result); + } +}