content: package org.ruoyi.common.encrypt.core.encryptor;
  
  import cn.hutool.core.util.ArrayUtil;
  import cn.hutool.core.util.StrUtil;
  import cn.hutool.crypto.SecureUtil;
  import cn.hutool.crypto.symmetric.AES;
  import org.ruoyi.common.encrypt.core.EncryptContext;
  import org.ruoyi.common.encrypt.enumd.AlgorithmType;
  import org.ruoyi.common.encrypt.enumd.EncodeType;
  
  import java.nio.charset.StandardCharsets;
  
  /**
   * AES算法实现
   *
   * @author 老马
   * @version 4.6.0
   */
  public class AesEncryptor extends AbstractEncryptor {
  
      private final AES aes;
  
      public AesEncryptor(EncryptContext context) {
          super(context);
          String password = context.getPassword();
          if (StrUtil.isBlank(password)) {
              throw new IllegalArgumentException("AES没有获得秘钥信息");
          }
          // aes算法的秘钥要求是16位、24位、32位
          int[] array = {16, 24, 32};
          if (!ArrayUtil.contains(array, password.length())) {
              throw new IllegalArgumentException("AES秘钥长度应该为16位、24位、32位，实际为" + password.length() + "位");
          }
          aes = SecureUtil.aes(context.getPassword().getBytes(StandardCharsets.UTF_8));
      }
  
      /**
       * 获得当前算法
       */
      @Override
      public AlgorithmType algorithm() {
          return AlgorithmType.AES;
      }
  
      /**
       * 加密
       *
       * @param value      待加密字符串
       * @param encodeType 加密后的编码格式
       */
      @Override
      public String encrypt(String value, EncodeType encodeType) {
          if (encodeType == EncodeType.HEX) {
              return aes.encryptHex(value);
          } else {
              return aes.encryptBase64(value);
          }
      }
  
      /**
       * 解密
       *
       * @param value      待加密字符串
       */
      @Override
      public String decrypt(String value) {
          return this.aes.decryptStr(value);
      }
  }
  