package com.dxhy.common.utils;

import lombok.extern.slf4j.Slf4j;
import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;

/**
 * JasyptConfig配置中心
 *
 * @author ZSC-DXHY
 * @date 创建时间: 2024-10-30 15:02
 */
@Slf4j
public class JasyptUtil {

    /**
     * 自己理解的加密盐值  也算是加密秘钥必须与配置文件中的一致
     */
    private static final String SALT_VALUE = "dxhyJasypt";

    /**
     * 加密
     *
     * @param text 需要加密的字符串
     * @return 加密后的字符串
     */
    public static String encrypt(String text) {
        return stringEncryptor().encrypt(text);
    }

    /**
     * 解密
     *
     * @param text 需要解密的字符串
     * @return 解密后的字符串
     */
    public static String decrypt(String text) {
        return stringEncryptor().decrypt(text);
    }

    /**
     * 配置（对应yml中的配置）
     *
     * @return SimpleStringPBEConfig
     */
    public static StringEncryptor stringEncryptor() {

        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        // 设置加密密码
        encryptor.setPassword(SALT_VALUE);

//        SimpleStringPBEConfig encryptor = new SimpleStringPBEConfig();
//        //设置盐值
//        encryptor.setPassword(SALT_VALUE);
//        //设置算法配置信息
//        encryptor.setAlgorithm("PBEWithMD5AndDES");
//        encryptor.setKeyObtentionIterations("1000");
//        encryptor.setProviderName("SunJCE");
//        encryptor.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
//        encryptor.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
//        encryptor.setStringOutputType("base64");
//        encryptor.setPoolSize("1");
        return encryptor;
    }


    public static void main(String[] args) {
        // 加密
        String encryptStr = encrypt("4BkM@%EYdUI6");
        // 解密
        String decryptStr = decrypt(encryptStr);
        System.out.println("加密后:" + encryptStr);
        System.out.println("解密后:" + decryptStr);
    }

}
