package com.ruoyi.web.controller.chenyanlogin;



import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;


import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

public class ChengYanAesUtil {


    /**
     * AES 加密（使用 Java 标准库 Base64）
     * @param encodeRules 密钥（16/24/32字节）
     * @param content     待加密内容
     * @return 加密后的 Base64 字符串，失败返回 null
     */
    public static String aesEncode(String encodeRules, String content) {
        try {
            // 1. 初始化密钥
            byte[] raw = encodeRules.getBytes(StandardCharsets.UTF_8);
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

            // 2. 初始化 Cipher（AES/ECB/PKCS5Padding）
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec);

            // 3. 执行加密
            byte[] encrypted = cipher.doFinal(content.getBytes(StandardCharsets.UTF_8));

            // 4. 使用 Java 标准库 Base64 编码（自动处理换行符）
            return Base64.getEncoder().encodeToString(encrypted);
        } catch (Exception e) {
            e.printStackTrace(); // 实际项目中建议用日志记录
            return null;
        }
    }

    /**
     * AES 解密（使用 Java 标准库 Base64）
     * @param encodeRules 密钥（需与加密一致）
     * @param content     Base64 编码的加密内容
     * @return 解密后的原始字符串，失败返回 null
     */
    public static String aesDecode(String encodeRules, String content) {
        try {
            // 1. 初始化密钥
            byte[] raw = encodeRules.getBytes(StandardCharsets.UTF_8);
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

            // 2. 初始化 Cipher
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, skeySpec);

            // 3. Base64 解码
            byte[] encrypted = Base64.getDecoder().decode(content);

            // 4. 执行解密
            byte[] original = cipher.doFinal(encrypted);
            return new String(original, StandardCharsets.UTF_8);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
//    /**
//     * 加密
//     *
//     * @param encodeRules
//     * @param content
//     * @return
//     */
//    public static String AESEncode(String encodeRules, String content) {
//        try {
//            byte[] raw = encodeRules.getBytes("utf-8");
//            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
//            // "算法/模式/补码方式"
//            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
//            cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
//            byte[] encrypted = cipher.doFinal(content.getBytes("utf-8"));
//            // 此处使用BASE64做转码功能，同时能起到2次加密的作用。
//            String encode = new Base64().encode(encrypted);
//            encode = encode.replaceAll(System.getProperty("line.separator"), "");
//            return encode;
//        } catch (Exception e) {
//        }
//        return null;
//    }
//
//    /**
//     * 解密
//     *
//     * @param encodeRules
//     * @param content
//     * @return
//     */
//    public static String AESDecode(String encodeRules, String content) {
//        try {
//            byte[] raw = encodeRules.getBytes("utf-8");
//            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
//            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
//            cipher.init(Cipher.DECRYPT_MODE, skeySpec);
//            byte[] encrypted = new BASE64Decoder().decodeBuffer(content);
//            byte[] original = cipher.doFinal(encrypted);
//            String originalString = new String(original, "utf-8");
//            originalString = originalString.replaceAll(System.getProperty("line.separator"), "");
//            return originalString;
//        } catch (Exception e) {
//
//        }
//        return null;
//    }
}
