package com.chenyang.nse.bussiness.tools.string;

import com.chenyang.nse.bussiness.tools.encryption.EncProvider;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;

public class AesTool {
   private static final String PASSWORD_SM4_KEY = "D1439845B4270773520B1B2B269A4383";

   public static String encrypt(String content, String password) {
      try {
         return EncProvider.encryptEcb("SM4", "D1439845B4270773520B1B2B269A4383", content, "0", (String)null, (String)null, (String)null);
      } catch (Exception e) {
         e.printStackTrace();
         return null;
      }
   }

   public static String decrypt(String content, String password) {
      try {
         return EncProvider.decryptEcb("SM4", "D1439845B4270773520B1B2B269A4383", content, "0", (String)null, (String)null, (String)null);
      } catch (NoSuchAlgorithmException e) {
         e.printStackTrace();
      } catch (NoSuchPaddingException e) {
         e.printStackTrace();
      } catch (InvalidKeyException e) {
         e.printStackTrace();
      } catch (IllegalBlockSizeException e) {
         e.printStackTrace();
      } catch (BadPaddingException e) {
         e.printStackTrace();
      } catch (Exception e) {
         e.printStackTrace();
      }

      return null;
   }

   public static String parseByte2HexStr(byte[] buf) {
      StringBuffer sb = new StringBuffer();

      for(int i = 0; i < buf.length; ++i) {
         String hex = Integer.toHexString(buf[i] & 255);
         if (hex.length() == 1) {
            hex = '0' + hex;
         }

         sb.append(hex.toUpperCase());
      }

      return sb.toString();
   }

   public static byte[] parseHexStr2Byte(String hexStr) {
      if (hexStr.length() < 1) {
         return null;
      } else {
         byte[] result = new byte[hexStr.length() / 2];

         for(int i = 0; i < hexStr.length() / 2; ++i) {
            int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
            int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
            result[i] = (byte)(high * 16 + low);
         }

         return result;
      }
   }

   public static void main(String[] args) {
      String content = "mydata";
      String password = "ghca";
      System.out.println("加密之前：" + content);
      String encrypt = encrypt(content, password);
      System.out.println("加密后的内容：" + encrypt);
      System.out.println("加密后字符串长度：" + encrypt.length());
      String decrypt = decrypt(encrypt, password);
      System.out.println("解密后的内容：" + new String(decrypt));
   }
}
