JAVA AES 加解密工具类

@Slf4j
public class AesTool {

    private static final Logger logger = LoggerFactory.getLogger(AesTool.class); //log日志

    private static final String ALGORITHM = "AES/ECB/PKCS5Padding";    //"算法/模式/补码方式"

    /*****************************************************
     * AES加密
     * @param content 加密内容
     * @param key 加密密码,由字母或数字组成
    此方法使用AES-128-ECB加密模式,key需要为16位
    加密解密key必须相同,如:abcd1234abcd1234
     * @return 加密密文
     ****************************************************/

    public static String enCode(String content, String key) throws Exception {
        byte[] raw = key.getBytes();  //获得密码的字节数组
        SecretKeySpec skey = new SecretKeySpec(raw, "AES"); //根据密码生成AES密钥
        Cipher cipher = Cipher.getInstance(ALGORITHM);  //根据指定算法ALGORITHM自成密码器
        cipher.init(Cipher.ENCRYPT_MODE, skey); //初始化密码器,第一个参数为加密(ENCRYPT_MODE)或者解密(DECRYPT_MODE)操作,第二个参数为生成的AES密钥
        byte[] byteContent = content.getBytes("utf-8"); //获取加密内容的字节数组(设置为utf-8)不然内容中如果有中文和英文混合中文就会解密为乱码
        byte[] encodeContent = cipher.doFinal(byteContent); //密码器加密数据
        return Base64.encodeBase64String(encodeContent); //将加密后的数据转换为字符串返回
    }

    /*****************************************************
     * AES解密
     * @param content 加密密文
     * @param key 加密密码,由字母或数字组成
    此方法使用AES-128-ECB加密模式,key需要为16位
    加密解密key必须相同
     * @return 解密明文
     ****************************************************/

    public static String deCode(String content, String key) throws Exception {
        byte[] raw = key.getBytes();  //获得密码的字节数组
        SecretKeySpec skey = new SecretKeySpec(raw, "AES"); //根据密码生成AES密钥
        Cipher cipher = Cipher.getInstance(ALGORITHM);  //根据指定算法ALGORITHM自成密码器
        cipher.init(Cipher.DECRYPT_MODE, skey); //初始化密码器,第一个参数为加密(ENCRYPT_MODE)或者解密(DECRYPT_MODE)操作,第二个参数为生成的AES密钥
        byte[] encodeContent = Base64.decodeBase64(content.getBytes(StandardCharsets.UTF_8)); //把密文字符串转回密文字节数组
        byte[] byteContent = cipher.doFinal(encodeContent); //密码器解密数据
        return new String(byteContent, "utf-8"); //将解密后的数据转换为字符串返回
    }

    /**
     * 自定义内容加盐
     *
     * @param salt
     * @return
     */
    public static String customSaltContent(String salt) {
        return DigestUtils.md5Hex(salt).substring(8, 24);
    }

    /* *//*****************************************************
     * AES加密解密测试
     * @param args
     * @return
     ****************************************************//*
    public static void main(String[] args) throws Exception {
        String content = "加密解密测试";
        logger.info("加密content:" + content);
        String key = "abcd1234abcd1234";
        logger.info("加密key:" + key);
        String enResult = enCode(content, key);
        logger.info("加密result:" + enResult);
        String deResult = deCode(enResult, key);
        logger.info("解密result:" + deResult);
    }*/

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一名技术极客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值