ASE加密工具类

package com.scai.dispatcher.util;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
/**
 * @author
 */
public class AESUtil {


    /**
     * AES加密算法-加密
     * @param data
     * @param key
     * @return
     * @throws Exception
     */
    public static String aesEncrypt(String data, String key){
        String str = "";
        try {
            byte[] kb = key.getBytes("utf-8");
            SecretKeySpec sks = new SecretKeySpec(kb, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//算法/模式/补码方式
            cipher.init(Cipher.ENCRYPT_MODE, sks);
            byte[] eb = cipher.doFinal(data.getBytes("utf-8"));
            return new BASE64Encoder().encode(eb);


        }catch (Exception e){
            e.printStackTrace();
            return  str;
        }

    }


    /**
     * AES加密算法-加密,采用密钥生成器keygenerator的方式
     * @param data
     * @param key
     * @return
     * @throws Exception
     */
    public static String aesEncryptBak(String data, String key){
        String str = "";
        try {
            //构造秘钥生成器
            KeyGenerator kgen = KeyGenerator.getInstance("AES");
            SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG" );
            secureRandom.setSeed(key.getBytes("utf-8"));
            kgen.init(128,secureRandom);
//            kgen.init(128, new SecureRandom(key.getBytes()));
            //产生原始对称密钥
            SecretKey secretKey = kgen.generateKey();
            byte[] enCodeFormat = secretKey.getEncoded();
            //生成密钥
            SecretKeySpec keySpec = new SecretKeySpec(enCodeFormat, "AES");
            //AES加密算法
            //算法/模式/补码方式
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            byte[] byteContent = data.getBytes("utf-8");
            cipher.init(Cipher.ENCRYPT_MODE, keySpec);
            byte[] result = cipher.doFinal(byteContent);
            //base64处理
            str = new BASE64Encoder().encode(result);
        } catch (Exception e){
            e.printStackTrace();
        }
        return  str;
    }

    /**
     * AES加密算法-解密
     * @param data
     * @param key
     * @return
     * @throws Exception
     */
    public static String aesDecrypt(String data, String key) {
        String str = "";
        try {
            byte[] buf = new BASE64Decoder().decodeBuffer(data);
            byte[] kb = key.getBytes("utf-8");
            SecretKeySpec sks = new SecretKeySpec(kb, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//算法/模式/补码方式
            cipher.init(Cipher.DECRYPT_MODE, sks);
            byte[] eb = cipher.doFinal(buf);
            return new String(eb);

        }catch (Exception e){
            e.printStackTrace();
            return str;
        }
    }


    /**
     * AES加密算法-解密,采用密钥生成器keygenerator的方式
     * @param data
     * @param key
     * @return
     * @throws Exception
     */
    public static String aesDecryptBak(String data, String key) {

        String str = "";
        try {
            //base64处理
            byte[] buf = new BASE64Decoder().decodeBuffer(data);

            //构造秘钥生成器
            KeyGenerator kgen = KeyGenerator.getInstance("AES");
            SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG" );
            secureRandom.setSeed(key.getBytes("utf-8"));
            kgen.init(128,secureRandom);
//            kgen.init(128, new SecureRandom(key.getBytes()));
            //产生原始对称密钥
            SecretKey secretKey = kgen.generateKey();
            byte[] enCodeFormat = secretKey.getEncoded();
            //生成密钥
            SecretKeySpec keySpec = new SecretKeySpec(enCodeFormat, "AES");
            //AES加密算法
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, keySpec);
            byte[] result = cipher.doFinal(buf);
            str = new String(result,"utf-8");

        }catch (Exception e){
            e.printStackTrace();
        }
        return str;
    }


}
package com.scai.dispatcher.util;

import java.util.HashMap;
import java.util.Map;

/**
 * <p>加密与签名DEMO,同时也包含了验签与解密的DEMO</p>
 * <ol>
 * <li>以下DEMO针对接口为例,展示了加密加签的工具使用方法</li>
 * <li>以下DEMO针对为例,展示了验签解密工具的使用方法</li>
 * <li>签名采用MD5对<strong>{secretKey}+参数字符串</strong>做签名;</li>
 * <li>加密采用AES加密算法对每个参数的参数值做加密,DEMO中对每个值做加密后重新放入了新的Map中</li>
 * </ol>
 * <p>其中本DEMO中所使用的<strong>SECRET_KEY</strong>只是演示所用,实际开发时需要替换成为真正提供的秘钥</p>
 *
 *
 * @Author Cosmo Zhu
 * @Date 2018/12/4 15:53
 * @email cosmo.zhu@scai-global.com
 * @copyright 2018 SCAI-GLOBAL All Rights Reserved.
 **/
public class EncrptAndSign {
    /**
     * 
     */
    final public static String SECRET_KEY = "testsecret";

    public Map encrpt(Map<String, String> param, String secrectKey) {
        Map<String, String> encrptResult = new HashMap<String, String>();
        //加密
        for (Map.Entry<String, String> entry : param.entrySet()) {
            String key = entry.getKey();
            String value = entry.getValue();
            String encrypt = AESUtil.aesEncrypt(value, secrectKey);
            encrptResult.put(key, encrypt);
        }

        return encrptResult;
    }

    public String sign(Map param, String secretKey) {
        return SignUtil.sign(param, secretKey);
    }

    public boolean validateSign(String secretKey, Map<String, String> param) {
        return SignUtil.validateSign(param, secretKey);
    }

    public Map<String, String> DeEncrpt(Map<String, String> encrptResult, String secretKey) {
        Map<String, String> deEncrptResult = new HashMap<String, String>();
        for (Map.Entry<String, String> entry : encrptResult.entrySet()) {
            String key = entry.getKey();
            String value = entry.getValue();
            String deEncrptMsg = AESUtil.aesDecrypt(value, secretKey);
            deEncrptResult.put(key, deEncrptMsg);
        }
        return deEncrptResult;
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值