package com.its.utils;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.security.*;

public class AES256Util {
    private String iv;
    private Key keySpec;
    
    public static String DEFAULT_KEY = "qjeockd!csp#qs)x";
    
    public AES256Util(String key) throws UnsupportedEncodingException {
        this.iv = key.substring(0, 16);
 
        byte[] keyBytes = new byte[16];
        byte[] b = key.getBytes("UTF-8");
        int len = b.length;
        if (len > keyBytes.length) {
            len = keyBytes.length;
        }
        System.arraycopy(b, 0, keyBytes, 0, len);
        SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
        this.keySpec = keySpec;
    }

//    public String aesEncode2(String str) throws UnsupportedEncodingException, NoSuchAlgorithmException,
//            NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException,
//            IllegalBlockSizeException, BadPaddingException{
//        Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
//        c.init(Cipher.ENCRYPT_MODE, keySpec, new IvParameterSpec(iv.getBytes()));
//        byte[] encrypted = c.doFinal(str.getBytes("UTF-8"));
//        return new String(Base64.encodeBase64(encrypted));
//    }
    public byte[] aesEncode(String str) throws UnsupportedEncodingException, NoSuchAlgorithmException,
            NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException,
            IllegalBlockSizeException, BadPaddingException{
        Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
        c.init(Cipher.ENCRYPT_MODE, keySpec, new IvParameterSpec(iv.getBytes()));
        byte[] encrypted = c.doFinal(str.getBytes("UTF-8"));
        return encrypted;
    }

//    public String aesDecode(String str) throws UnsupportedEncodingException, NoSuchAlgorithmException,
//                                               NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException,
//                                               IllegalBlockSizeException, BadPaddingException {
//        Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
//        c.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(iv.getBytes("UTF-8")));
//        byte[] byteStr = Base64.decodeBase64(str.getBytes());
//        return new String(c.doFinal(byteStr),"UTF-8");
//    }

    public static String encryptSHA256(String str) {
        String SHA = "";

        try {
            MessageDigest msgDigest = MessageDigest.getInstance("SHA-256");
            msgDigest.update(str.getBytes());
            byte byteData[] = msgDigest.digest();
            StringBuffer builder = new StringBuffer();

            for (byte b : byteData) {
                builder.append(String.format("%02x", b));
            }
//            for(int i=0; i < byteData.length; i++) {
//                builder.append(Integer.toString((byteData[i]&0xff) + 0x100, 16).substring(1));
//            }
            SHA = builder.toString();
        } catch (NoSuchAlgorithmException e) {
            SHA = "";
        }
        return SHA;
    }
}