package com.dzcm.utils;

import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
import org.apache.commons.codec.binary.Base64;

import java.security.PublicKey;


/**
 * @author: LiuHangJing
 * @Date: 2023/4/20 17:05
 * @Description: RSA非对称加密
 */
public class RSAUtil {

    public static String privateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAOxBx5X1nf08uRsmvIOe05sXqEf900nRCPx1V8N7qM4nP+gDCgqvkttuldoSQSzLRqKQLRs4EQXyJDNQjwu2U9somdKS68yyx0LTXMxvlkH0Z7k7VLvQp+OMUDA9CRUBp3yvylAQNbwDSJoldL9ZS5nN4L8bp+BcI8L9lBkN+dixAgMBAAECgYBA74+I8xp6iR8jjFESKCxnG2iAaQ6S4maC5Um7DBkImJcjEPrIlxtZPprndk79nd2LPu925MEhDj3O8NxwTqvbMKSqil5mIHWfR6dwPUQznA7lRpw1U+PFGN3/iwQzzoOfbQklD9giHt4cjiMg+USCnQsMXxyLckULrJlwsf3YAQJBAPruGcYD0KZiFbB8uuhRHVJuC2heRPmGzUyAXCfTgQ2SpzTetw0V7O/E0stGdD2+/bf3P/5Joca1HrTfXmxS/oECQQDxB8jJ0rPEtrMmrIJN8m5nPoufd0hEML+pNNO2j68sYhAChc9uEQPGLyebOCBhfl77A3+fw5iiIXUXVP47SiIxAkEAv+Sx5RIpz/OWbp8UOHE/oTfylV/yE3iZK3XGA9blDEIoiHABQIqR5VJ5eWZpooaadMMqNwaMJu9/igZ/qQtXAQJAIBTMKejMmqtCrywY7+0Lutw9U01aJhFjAU+RumPnif3Hab6LvHexS+is2eEfljpuw/RUQVyUbUgMwL1EVXnpkQJANMPd8ZI4P3EJ6qlurQE42oTcqQM3x1JnOPvkb7ZLUXZN6ob8nxTNVKJOiJ6S+hD75CFiuWbb/z9VdCLUjN2aLQ==";
    public static String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDsQceV9Z39PLkbJryDntObF6hH/dNJ0Qj8dVfDe6jOJz/oAwoKr5LbbpXaEkEsy0aikC0bOBEF8iQzUI8LtlPbKJnSkuvMssdC01zMb5ZB9Ge5O1S70KfjjFAwPQkVAad8r8pQEDW8A0iaJXS/WUuZzeC/G6fgXCPC/ZQZDfnYsQIDAQAB";
    
  
    public static void main(String[] args){
        getKey();
    }

    public static void getKey(){
        RSA rsa = new RSA();
        String publicKeyBase64 = rsa.getPublicKeyBase64();
        String privateKeyBase64 = rsa.getPrivateKeyBase64();
        System.out.println(publicKeyBase64);
        System.out.println(privateKeyBase64);
    }
    /**
     * @author: LiuHangJing
     * @Date: 2023/4/20 17:53
     * @Description: 公钥加密
     */
    public static String encrypt(String content, String publicKey){
        RSA rsa = new RSA(null, publicKey);

        // 公钥加密,私钥解密
        byte[] encrypt = rsa.encrypt(StrUtil.bytes(content, CharsetUtil.CHARSET_UTF_8), KeyType.PublicKey);

        String originalString = new String(new Base64().encode(encrypt));
        return originalString;
    }

    /**
     * @author: LiuHangJing
     * @Date: 2023/4/20 17:54
     * @Description: 解密
     */
    public static String decrypt(String enContent, String privateKey){
        RSA rsa = new RSA(privateKey, null);
        byte[] decrypt = rsa.decrypt(enContent, KeyType.PrivateKey);

        String str = StrUtil.str(decrypt, CharsetUtil.CHARSET_UTF_8);
        return str;
    }

}