Java.Utils:AES-128-CBC 加密方式

packagecom.boob.common.utils;importorg.apache.commons.codec.binary.Base64;importorg.bouncycastle.jce.provider.BouncyCastleProvider;importjavax.crypto.BadPaddingException;importjavax.crypto….

大家好,又见面了,我是你们的朋友全栈君。

Don’t say much, just go to the code.

Maven

<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk16 -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk16</artifactId>
    <version>1.46</version>
</dependency>
package org.bood.common.utils;

import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

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.*;
import java.security.spec.InvalidParameterSpecException;

/** * AES-128-CBC 加密方式 </br> * 注:</br> * AES-128-CBC 可以自己定义“密钥”和“偏移量“。</br> * AES-128 是 jdk 自动生成的“密钥”。</br> * * @author bood * @since 2020/10/16 */
public class AesCbcUtils { 
   

    private AesCbcUtils() { 
   
    }

    static { 
   
        // BouncyCastle是一个开源的加解密解决方案
        Security.addProvider(new BouncyCastleProvider());
    }

    /** * <p> * AES 解密 * </p> * * @param data: 密文,被加密的数据 * @param key: 秘钥 * @param iv: 偏移量 * @param encodingFormat: 解密后的结果需要进行的编码 * @return:java.lang.String * @author:bood * @date:2020/10/16 */
    public static String decrypt(String data, String key, String iv, String encodingFormat) throws Exception { 
   
        // 被加密的数据
        byte[] dataByte = Base64.decodeBase64(data);
        // 加密秘钥
        byte[] keyByte = Base64.decodeBase64(key);
        // 偏移量
        byte[] ivByte = Base64.decodeBase64(iv);
        try { 
   
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
            SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
            AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
            parameters.init(new IvParameterSpec(ivByte));
            // 初始化
            cipher.init(Cipher.DECRYPT_MODE, spec, parameters);
            byte[] resultByte = cipher.doFinal(dataByte);
            if (null != resultByte && resultByte.length > 0) { 
   
                String result = new String(resultByte, encodingFormat);
                return result;
            }
            return null;
        } catch (NoSuchAlgorithmException e) { 
   
            e.printStackTrace();
        } catch (NoSuchPaddingException e) { 
   
            e.printStackTrace();
        } catch (InvalidParameterSpecException e) { 
   
            e.printStackTrace();
        } catch (InvalidKeyException e) { 
   
            e.printStackTrace();
        } catch (InvalidAlgorithmParameterException e) { 
   
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) { 
   
            e.printStackTrace();
        } catch (BadPaddingException e) { 
   
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) { 
   
            e.printStackTrace();
        }
        return null;
    }

}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127712.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 10款Java小游戏(详解+源码)

    10款Java小游戏(详解+源码)开源Java小游戏前言下面就给大家介绍十几个开源的Java小游戏,供大家学习交流。资源都下载好共享到我的交流群了,需要的在群内自取862461829不收取任何资源费,毕竟开源才是我们的宗旨。【群里还含有:Java80g学习资料包+Java学习书籍+Java项目实战源码+安装软件等】各类资源都有哦~1.数字彩虹雨这是我比较喜欢的一个小应用,虽然代码比较简单但是喜欢那种简单的美。下面是运行截图,就是我们在黑客帝国里面见到的那种数字雨,运行时是全屏的。下面说说下载链接里面的东西.

    2022年7月9日
  • URAL 1180. Stone Game (博弈 + 规律)[通俗易懂]

    URAL 1180. Stone Game (博弈 + 规律)

    2022年1月24日
  • 12个开源报表工具有哪些_自定义报表工具

    12个开源报表工具有哪些_自定义报表工具1.BIRTProjectBIRT报表是一款非常流行的开源报表开发工具。拥有和Dreamweaver一般的操作界面,可以像画table一样画报表,生成图片,导出Excel,html分页样样齐全,样式和script设置简单。 2.PentahoPentahoReportDesigner是一款所见即所得的开源报表设计工具。在设计报表的时候,用户可以随意拖放和设

    2022年10月20日
  • win10下MinGW安装及配置

    win10下MinGW安装及配置下载MinGW安装管理器进入官网MinGW官网点击右上角download,加载可能有些慢,稍等一下。点击如图下载。下载完install安装点击change选择你要安装的目录,continue继续。等待下载,下载完成后单击continue继续。现在MinGW安装管理器就有了,可以正式安装MinGW了安装MinGW上一步安装好管理器之后会自动在桌面创建一个快捷方式,双击打开…

    2022年6月15日
  • navicat15永久激活码最新【2021.7最新】「建议收藏」

    (navicat15永久激活码最新)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月21日
  • SpringBoot使用@Mapper和@MapperScan注解无效的解决方法

    SpringBoot使用@Mapper和@MapperScan注解无效的解决方法在使用@Mapper注解时,注解无效,service层,dao层该添加的注解都添加了,最后发现是少加了一个jar包&amp;lt;!–缺少此jar包,导致@Mapper注解无效–&amp;gt;&amp;lt;dependency&amp;gt;&amp;lt;groupId&amp;gt;org.mybatis.spring.boot&amp;lt;/groupId&amp;gt;

    2022年6月10日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号