java AES加密

package com.jsdc.traffic.terminal.util;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.jsdc.traffic.terminal.po.VioPic;
import org.apache.commons.codec.binary.Base64;


import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;




public class AESUtil {


    private static final String KEY_ALGORITHM = "AES";
    private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";//默认的加密算法


    /**
     * AES 加密操作
     *
     * @param object   待加密内容
     * @param password 加密密码
     * @return 返回Base64转码后的加密数据
     */
    public static String setAES(String object, String password) {
        try {
            // 创建密码器
            Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
            byte[] byteContent = object.getBytes("utf-8");
            // 初始化为加密模式的密码器
            cipher.init(Cipher.ENCRYPT_MODE, getSecretKey(password));
            // 加密
            byte[] result = cipher.doFinal(byteContent);
            //通过Base64转码返回
            return Base64.encodeBase64String(result);
        } catch (Exception ex) {
           // Logger.getLogger(AESUtil.class.getName()).log(Level.SEVERE, null, ex);
        }


        return null;
    }


    /**
     * AES 解密操作
     * 根据数据库加密过的内容和密钥解密
     *
     * @param content
     * @param passKey
     * @return
     */
    public static String getAES(String content, String passKey) {
        try {
            //实例化
            Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
            //使用密钥初始化,设置为解密模式
            cipher.init(Cipher.DECRYPT_MODE, getSecretKey(passKey));
            //执行操作
            byte[] result = cipher.doFinal(Base64.decodeBase64(content));
            return new String(result, "utf-8");
        } catch (Exception ex) {
            //Logger.getLogger(AESUtil.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("密钥错误");
        }
        return null;
    }


    /**
     * 生成加密秘钥
     *
     * @return
     */
    public static SecretKeySpec getSecretKey(final String passKey) {
        //返回生成指定算法密钥生成器的 KeyGenerator 对象
        KeyGenerator kg = null;
        try {
            kg = KeyGenerator.getInstance(KEY_ALGORITHM);
            //AES 要求密钥长度为 128
            kg.init(128, new SecureRandom(passKey.getBytes()));
            //生成一个密钥
            SecretKey secretKey = kg.generateKey();
            return new SecretKeySpec(secretKey.getEncoded(), KEY_ALGORITHM);// 转换为AES专用密钥
        } catch (NoSuchAlgorithmException ex) {
           // Logger.getLogger(AESUtil.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }


    /**
     * 反射为json
     *
     * @param obj
     * @param
     * @return
     */
    public static String setClasstoJson(Object obj) {
        JSONObject jsonObject = new JSONObject();
        if (obj != null && obj != "") {
            Class cl = obj.getClass();
            Field[] fields = cl.getDeclaredFields();
            for (Field ne : fields) {
                String name = ne.getName();
                if (!name.endsWith("serialVersionUID")) {
                    try {
                        //字段首字母大写
                        char[] chars = name.toCharArray();
                        if (Character.isLowerCase(chars[0])) {
                            chars[0] -= 32;
                        }
                        //调用cl类中对象get方法
                        Method val = cl.getMethod("get" + new String(chars));
                        //取值并setCellValue
                        if (ne.getType().equals("B")){
                            byte[] bytes = (byte[]) val.invoke(obj);
                            jsonObject.put(name, bytes != null && bytes.length > 0 ? new String(bytes) : "");
                        } else {
                            jsonObject.put(name, val.invoke(obj) != null ? val.invoke(obj).toString() : "");
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        return jsonObject.toJSONString();
    }

}


=================================

// 生成秘钥 ---temp对象数据加密

JSONObject vcitemJsonObject = (JSONObject) JSON.parse(AESUtil.setClasstoJson(temp));

//获得加密字符串

String vcitemAescode = AESUtil.setAES(vcitemJsonObject.toJSONString(), vioId.toString());


猜你喜欢

转载自blog.csdn.net/ajax_yan/article/details/79932092
今日推荐