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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JVM调优工具「建议收藏」

    JVM调优工具「建议收藏」JVM调优工具Jconsole:jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。JProfiler:商业软件,需要付费。功能强大。VisualVM:JDK自带,功能强大,与JProfiler类似。推荐。如何调优观察内存释放情况、集合类检查、对象树上面这些调优工具都提供了强大的功能,但是总的来说一般分为以下几类功能堆信息查…

    2022年6月1日
    29
  • vue 二维码生成_二维码图片生成器

    vue 二维码生成_二维码图片生成器本文主要介绍vue生成二维码一、qrcode1.1效果图npminstall–saveqrcodejs21.2关键代码<template> <divclass=”qrcode”ref=”qrCodeUrl”></div></template><script>importQRCodefrom’qrcodejs2’exportdefault{name:”Index”,data(){.

    2022年10月3日
    0
  • net mvc 设置启动页面「建议收藏」

    net mvc 设置启动页面「建议收藏」在项目的App_Start文件夹下的RouteConfig页面设置publicstaticvoidRegisterRoutes(RouteCollectionroutes){routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”);routes.MapRoute(name:”Default”,url:”{controller}/{action}/{id}”,defaults:new{controller=”Home”,

    2022年7月27日
    2
  • 香农编码的matlab仿真实现实验报告_香农编码例题

    香农编码的matlab仿真实现实验报告_香农编码例题实验目的:通过该实验,掌握通过计算机实验可变长信源编码方法,进一步熟悉香农编码,费诺编码以及霍夫曼编码方法。实验环境:Matlab7.1实验内容及过程:1.对于给定的信源的概率分布,用MATLAB语言实现香农编码。2.对于给定的信源的概率分布,用MATLAB语言实现霍夫曼编码。3.对于给定的信源的概率分布,用MATLAB语言实现游程编码。以下为M文件:1.funct…

    2022年9月4日
    2
  • RuntimeException和非RuntimeException的区别「建议收藏」

    RuntimeException和非RuntimeException的区别「建议收藏」通俗一点:   Error:系统级别的错误,如栈溢出内存溢出之类 ,此类错误一般情概况保证程序能安全退出即可   Exception:分为RuntimeException 和 非RuntimeException                                                                           …

    2022年7月18日
    14
  • 2021.4.14版本激活码_通用破解码[通俗易懂]

    2021.4.14版本激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    57

发表回复

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

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