首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java.Utils:AES-128-CBC 加密方式

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

作者头像
全栈程序员站长
发布2022-07-25 19:52:12
发布2022-07-25 19:52:12
1.8K0
举报

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

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

Maven

代码语言:javascript
复制
<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk16 -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk16</artifactId>
    <version>1.46</version>
</dependency>
代码语言:javascript
复制
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.cn/127712.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档