// Path: src/main/java/com/wind/common/StringUtil.java
// public class StringUtil {
// 
//     /**
//      * 判断字符串是否为null或空字符串
//      * @param str
//      * @return
//      */
//     public static boolean isNotBlank(String str){
//         return str != null && !"".equals(str.trim());
//     }
// 
// 
//     /**
//      * url编码
//      * @param str
//      * @return
//      */
//     public static String encodeUrl(String str){
//         String s = null;
//         try {
//             s = URLEncoder.encode(str, Constants.UTF8);
//         } catch (UnsupportedEncodingException e) {
//             e.printStackTrace();
//         }
// 
//         return s;
//     }
// 
//     /**
//      * url解码
//      * @param str
//      * @return
//      */
//     public static String decodeUrl(String str){
//         String s = null;
//         try {
//             s = URLDecoder.decode(str, Constants.UTF8);
//         } catch (UnsupportedEncodingException e) {
//             e.printStackTrace();
//         }
//         return s;
//     }
// 
// 
//     /**
//      * 字符串分隔 StringTokenizer效率是三种分隔方法中最快的
//      * @param str
//      * @param sign
//      * @return
//      */
//     public static String[] split(String str, String sign){
//         if(str == null){
//             return new String[]{};
//         }
//         StringTokenizer token = new StringTokenizer(str,sign);
//         String[] strArr = new String[token.countTokens()];
//         int i = 0;
//         while(token.hasMoreElements()){
//             strArr[i] = token.nextElement().toString();
//             i++;
//         }
//         return strArr;
//     }
// 
//     /**
//      * 字符串拼接
//      * @param sign
//      * @param strArr
//      * @return
//      */
//     public static String joinStr(String sign, String... strArr){
//         Optional<String> optional  = Arrays.stream(strArr).filter(Objects::nonNull
//         ).reduce((a, b) -> a + sign + b);
//         return optional.orElse("");
//     }
// }


import com.wind.common.StringUtil;
import org.apache.commons.codec.binary.Base64;
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;
import java.util.*;
        Map<String, String> keyMap = new HashMap<>(2);
        try {
            KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KEY_ALGORITHM);
            keyPairGenerator.initialize(size);
            KeyPair keyPair = keyPairGenerator.generateKeyPair();
            RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
            RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
            keyMap.put(PUBLIC_KEY, Base64.encodeBase64String(publicKey.getEncoded()));
            keyMap.put(PRIVATE_KEY, Base64.encodeBase64String(privateKey.getEncoded()));
            return keyMap;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return keyMap;
    }

    /**
     * 生成签名
     * @param privateKey
     * @param content
     * @return
     */
    public static String genSign(String privateKey, String content, String signType, String charset){
        String sign = "";
        try {
            PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKey));
            KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
            PrivateKey key = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
            Signature signature = Signature.getInstance(signType);
            signature.initSign(key);
// Path: src/main/java/com/wind/common/StringUtil.java
// public class StringUtil {
// 
//     /**
//      * 判断字符串是否为null或空字符串
//      * @param str
//      * @return
//      */
//     public static boolean isNotBlank(String str){
//         return str != null && !"".equals(str.trim());
//     }
// 
// 
//     /**
//      * url编码
//      * @param str
//      * @return
//      */
//     public static String encodeUrl(String str){
//         String s = null;
//         try {
//             s = URLEncoder.encode(str, Constants.UTF8);
//         } catch (UnsupportedEncodingException e) {
//             e.printStackTrace();
//         }
// 
//         return s;
//     }
// 
//     /**
//      * url解码
//      * @param str
//      * @return
//      */
//     public static String decodeUrl(String str){
//         String s = null;
//         try {
//             s = URLDecoder.decode(str, Constants.UTF8);
//         } catch (UnsupportedEncodingException e) {
//             e.printStackTrace();
//         }
//         return s;
//     }
// 
// 
//     /**
//      * 字符串分隔 StringTokenizer效率是三种分隔方法中最快的
//      * @param str
//      * @param sign
//      * @return
//      */
//     public static String[] split(String str, String sign){
//         if(str == null){
//             return new String[]{};
//         }
//         StringTokenizer token = new StringTokenizer(str,sign);
//         String[] strArr = new String[token.countTokens()];
//         int i = 0;
//         while(token.hasMoreElements()){
//             strArr[i] = token.nextElement().toString();
//             i++;
//         }
//         return strArr;
//     }
// 
//     /**
//      * 字符串拼接
//      * @param sign
//      * @param strArr
//      * @return
//      */
//     public static String joinStr(String sign, String... strArr){
//         Optional<String> optional  = Arrays.stream(strArr).filter(Objects::nonNull
//         ).reduce((a, b) -> a + sign + b);
//         return optional.orElse("");
//     }
// }


// Path: src/main/java/com/wind/encrypt/RsaUtil.java
import com.wind.common.StringUtil;
import org.apache.commons.codec.binary.Base64;
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;
import java.util.*;

        Map<String, String> keyMap = new HashMap<>(2);
        try {
            KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KEY_ALGORITHM);
            keyPairGenerator.initialize(size);
            KeyPair keyPair = keyPairGenerator.generateKeyPair();
            RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
            RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
            keyMap.put(PUBLIC_KEY, Base64.encodeBase64String(publicKey.getEncoded()));
            keyMap.put(PRIVATE_KEY, Base64.encodeBase64String(privateKey.getEncoded()));
            return keyMap;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return keyMap;
    }

    /**
     * 生成签名
     * @param privateKey
     * @param content
     * @return
     */
    public static String genSign(String privateKey, String content, String signType, String charset){
        String sign = "";
        try {
            PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKey));
            KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
            PrivateKey key = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
            Signature signature = Signature.getInstance(signType);
            signature.initSign(key);
            if(StringUtil.isNotBlank(charset)){