Java里的AES/CBC/PKCS7Padding加密解密_java aes pkcs7padding解密-程序员宅基地

技术标签: java  

Java 里的AES/CBC/PKCS7Padding加解密,由于Java对PKCS7Padding支持不是很好,所以在网上找了许多类似资料,各有各的实现,最后总结下来是很简单的。也不费话了,直接上代码。

public final class AesUtils {
    private static final String CHARSET_NAME = "UTF-8";
    private static final String AES_NAME = "AES";
    public static final String ALGORITHM = "AES/CBC/PKCS7Padding";

    static {
        Security.addProvider(new BouncyCastleProvider());
    }

    /**
     * 加密
     *
     * @param content
     * @param key
     * @return
     */
    public static String encrypt(@NotNull String content, @NotNull String key) {
        byte[] result = null;
        try {
            Cipher cipher = Cipher.getInstance(ALGORITHM);
            SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(CHARSET_NAME), AES_NAME);
            AlgorithmParameterSpec paramSpec = new IvParameterSpec(new byte[16]);
            cipher.init(Cipher.ENCRYPT_MODE, keySpec, paramSpec);
            result = cipher.doFinal(content.getBytes(CHARSET_NAME));
        } catch (Exception ex) {
            Throwables.propagate(ex);
        }
        return Base64.encodeBase64String(result);
    }

    /**
     * 解密
     *
     * @param content
     * @param key
     * @return
     */
    public static String decrypt(@NotNull String content, @NotNull String key) {
        try {
            Cipher cipher = Cipher.getInstance(ALGORITHM);
            SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(CHARSET_NAME), AES_NAME);
            AlgorithmParameterSpec paramSpec = new IvParameterSpec(new byte[16]);
            cipher.init(Cipher.DECRYPT_MODE, keySpec, paramSpec);
            return new String(cipher.doFinal(Base64.decodeBase64(content)), CHARSET_NAME);
        } catch (Exception ex) {
            Throwables.propagate(ex);
        }
        return StringUtils.EMPTY;
    }
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/java_zjh/article/details/80915655

智能推荐

Fatal error: Call to a member function fetch_row() on a non-object in C:\wamp\www\baicaotang\admin\m_fatal error: call to a member function fetchrow() -程序员宅基地

文章浏览阅读1.9k次。昨晚在做测试的时候,输出数据测试的时候一直出现这个问题,_fatal error: call to a member function fetchrow() on a non-object in d:\xamp

http请求详解-程序员宅基地

文章浏览阅读1.1w次,点赞10次,收藏36次。1. 简介HTTP(HyperText Transfer Protocol,超文本传输协议)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务,HTTP目前协议的版本是1.1。HTTP遵循请求(Request)/应答(Response)模型。Web浏览器向Web服务器发送请求,Web服务器处理请求并返回适当_http请求

纯国产环境(银河麒麟 + 飞腾)JAVA程序(Springboot + Mybatis + 达梦数据库)部署_国产化 java 部署-程序员宅基地

文章浏览阅读7.4k次,点赞6次,收藏32次。目录JAVA程序部署前言项目打包银河麒麟jdk安装银河麒麟系统 达梦数据库 安装JAVA程序部署前言运行环境:银河麒麟 + 飞腾CPU项目框架:Springboot + Mybatis + 达梦数据库 JDK1.8上一篇写了该项目的源码,这篇主要写该项目在国产操作系统上部署以及达梦数据库在国产操作系统上安装,创建。查看项目源码请点链接纯国产环境JAVA程序搭建(Springboot + Mybatis + 达梦数据库)一项目打包修改pom文件:(注释generator插件,放开打包需要_国产化 java 部署

大尺度衰落与小尺度衰落_衰落与损耗可以相加嘛-程序员宅基地

文章浏览阅读4.5k次,点赞5次,收藏31次。无线电磁波信号在收发天线长距离(远大于传输波长)或长时间范围发生的功率变化,称为大尺度衰落,一般可以用路径损耗模型来描述,路径损耗是由发射功率在空间中的辐射扩散造成的,根据功率传输Friss公式可计算出接收信号功率为::发射信号功率:发射天线增益:接收天线增益:电磁波的波长:收发端距离:系统的损耗因子,与传播特性无关通过对接收功率与发射功率作比值,可以把路径损耗定义为:假设通信系统是理想的(L=1),除去收发端天线的增益(),可得理想传播环境下路径损耗与收发端距离、传输频率的关系为:因此理想环境下,路径损耗_衰落与损耗可以相加嘛

STM32F207调试记录之串口配置_stm f207 串口速率-程序员宅基地

文章浏览阅读3.9k次,点赞2次,收藏4次。STM32F207调试记录之串口配置_stm f207 串口速率

【啊哈!算法】算法12:堆——神奇的优先队列(下)_4 17啊哈(i说哈1-程序员宅基地

文章浏览阅读4k次,点赞6次,收藏8次。接着上一Pa说。就是如何建立这个堆呢。可以从空的堆开始,然后依次往堆中插入每一个元素,直到所有数都被插入(转移到堆中为止)。因为插入第i个元素的所用的时间是O(log i),所以插入所有元素的整体时间复杂度是O(NlogN),代码如下。n=0;for(i=1;i){ n++; h[ n]=a[ i]; //或者写成scanf("%d",&h[ n]); _4 17啊哈(i说哈1

随便推点

python二进制取反_Python的二进制位运算-程序员宅基地

文章浏览阅读2.4k次。Python语言能够对整数进行逐位操作,它支持的运算符及含义如下所示:&:按位与|:按位或^:按位异或~:取反<>>:右移对于整型数据,各种位操作是对该数据的补码进行的(正数的补码与原码相同,下面举例皆以正数为例);对于长整型数据,由于其位宽不定,所以进行位运算时,认为其补码的符号位向外无限扩展。下面对各运算符进行举例说明:(1)首先看取反>>> ~1-..._python 二进制取反运算符

现有的图像三维重建技术介绍和比较_psp图像三维重构理论-程序员宅基地

文章浏览阅读2.5w次,点赞8次,收藏71次。图像三维重建技术简介_psp图像三维重构理论

休眠和睡眠有哪些区别?如何让电脑一键休眠?-程序员宅基地

文章浏览阅读550次。电脑中有休眠和睡眠,那么它们有什么区别呢?下面我们就通过本文来了解一下。

点云配准——经典配准算法及配准效果对比-程序员宅基地

文章浏览阅读1.3w次,点赞19次,收藏133次。点云配准技术即是通过寻找不同视角下不同点云之间的映射关系,利用一定的算法将同一目标场景的不同点云转换到同一个坐标系下,形成更完整的点云的过程。3D点云配准是是点云处理技术的一个重要组成部分。如何使点云配准方法更加快速准确 已成为一个点云研究的热点和难点。点云配准要应对点云数据的无序性、非结构化、不均匀和噪声等干扰。如何有效地利用已有的信息实现精确、鲁棒的点云配准算法具有重要的研究意义和价值。_点云配准

TensorFlow报ImportError: cannot import name string_int_label_map_pb2_cannot import name 'string_int_label_map_pb2' from-程序员宅基地

文章浏览阅读4.4k次。错误描述models仓库地址:https://github.com/tensorflow/models在使用TensorFlow的models来训练目标检测算法,通过object_detection/datasets_tools来在自己的数据集上构建一个tfrecord文件的时候报ImportError: cannot import name 'string_int_label_map_pb2'错误错误定位在label_map_util文件中第27行from object_detect_cannot import name 'string_int_label_map_pb2' from 'object_detection.protos

Git用户名/密码/邮箱,及设置git配置_git配置邮箱-程序员宅基地

文章浏览阅读9.7k次,点赞2次,收藏6次。Git用户名/密码/邮箱,及设置git配置_git配置邮箱