加解密过程中,记得数据中的空格处理,这里会有个大坑,解密前要处理字符串前后端的空格,解密后也要处理字符串前后端的空格

package com.xxx...;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;

/**
 * AES 128bit 加密解密工具类
 * @author dy
 */
public class AesEncryptUtil {

/**
     * 加密方法
     * @param data  要加密的数据
     * @param key 加密key
     * @param iv 加密iv iv和key可相同
     * @return 加密的结果
     * @throws Exception
     */
    public static String encrypt(String data, String key, String iv) throws Exception {
        try {

Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");//"算法/模式/补码方式"
            int blockSize = cipher.getBlockSize();

byte[] dataBytes = data.getBytes();
            int plaintextLength = dataBytes.length;
            if (plaintextLength % blockSize != 0) {
                plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));
            }

byte[] plaintext = new byte[plaintextLength];
            System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);

SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
            IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());

cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
            byte[] encrypted = cipher.doFinal(plaintext);

return new Base64().encodeToString(encrypted);

} catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

/**
     * 解密方法
     * @param data 要解密的数据
     * @param key  解密key
     * @param iv 解密iv  iv和key可相同
     * @return 解密的结果
     * @throws Exception
     */
    public static String desEncrypt(String data, String key, String iv) throws Exception {
        try {
            byte[] encrypted1 = new Base64().decode(data);

Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
            SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
            IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());

cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);

byte[] original = cipher.doFinal(encrypted1);
            String originalString = new String(original);
            return originalString;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

public static void main(String[] args) {
        String str = "P6nMBo5ZJf61MbQkzLysAA==";
        try {
            String ss = AesEncryptUtil.desEncrypt(str, "sihdfoisahfosognskgnsalg", "sihdfoisahfosognskgnsalg");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

AES 加解密以及异常情况处理相关推荐

  1. 数据採集器服务——Socket(今天才发现AES加解密代码跟贴的时候不一样,貌似乱码,不知什么情况)...

    近期刚做的一个项目.关于 Socket TCP 通信. 需求方提供了一个 ARM 机器,及数据採集器,须要我做一个服务端与数据採集器进行交互. 目的: 数据採集器:定时将读取到的数据发送到服务端. 服 ...

  2. openssl c++实现bouncycastle中AES加解密

    0x01 为什么要用bouncycastle 先说说JCE(Java Cryptography Extension)是一组包,它们提供用于加密.密钥生成和协商以及 Message Authentica ...

  3. AES加解密算法详解

    0 AES简介 美国国家标准技术研究所在2001年发布了高级加密标准(AES).AES是一个对称分组密码算法,旨在取代DES成为广泛使用的标准. 根据使用的密码长度,AES最常见的有3种方案,用以适应 ...

  4. Java使用AES加解密

    Java使用AES加解密 目录 1.1生成密钥 1.2密钥的存储 1.3获取存储的密钥 1.4加解密 1.5使用存储的密钥进行加解密示例 AES是一种对称的加密算法,可基于相同的密钥进行加密和解密.J ...

  5. JS逆向加解密——python 实现AES加解密

    前言 写爬虫项目,做JS逆向或者APP逆向时,经常遇到网站的很多参数都经过AES加密解密,用python实现AES加解密是非常简单的,免去了扣JS代码,并且实现格式固定,所以本文提供实现好的AES加解 ...

  6. 安卓AES加解密(兼容Android7.0)

    相关参考## http://blog.csdn.net/q4878802/article/details/76690493 http://blog.csdn.net/drkcore/article/d ...

  7. C语言实现AES加解密

    C语言实现AES加解密 AES算法 具体代码 AES算法 (AES)RIJNDAEL算法是一个数据块长度盒密钥长度都可变的分组加密算法,其数据块长度和密钥长度都可独立地选定为大于等于128位且小于等于 ...

  8. Java code lib aes 加解密

    Java aes 加解密 /*** Created by LvJianwei on 2018/2/8.*/import javax.crypto.Cipher; import javax.crypto ...

  9. 前端 crypto-js aes 加解密

    背景 前段时间公司做项目,该项目涉及到的敏感数据比较多,经过的一波讨论之后,决定前后端进行接口加密处理,采用的是 AES + BASE64 算法加密~ 网上关于 AES 对称加密的算法介绍看上一篇! ...

最新文章

  1. Vue 组件间通信方法汇总
  2. JavaWeb课程复习资料(十)——修改功能
  3. 计算机专硕专业课单科分数线,计算机考研|这两所自划线,单科没过线也能复试?...
  4. 编译原理 —— 1.1 什么是编译
  5. 有的歌声音大有的歌声音小_手机听筒声音小怎么办?别急,只需一把刷子
  6. Python图像匹配
  7. 图灵在计算机科学方面主要贡献,图灵在计算机理论方面的贡献
  8. 三国志·魏书·牵招传
  9. Python实现线性函数的拟合算法
  10. QOS端口限速EMAIL流量限速
  11. 运用Python 模拟太阳-地球-月亮运动模型
  12. springboot文件上传 Required request part 'file' is not present
  13. python3 爬虫神器pyquery的使用实例之爬网站图片
  14. GoLang下载安装
  15. 基于uni-app开发的一款视频播放器插件
  16. DFT(离散傅里叶变换)
  17. Shiro实现session限制登录数量踢人下线
  18. 三维shepp_logan头模型的投影数据的产生
  19. Azure Blob 存储
  20. 物联网会成为移动互联网的下一个红海市场吗

热门文章

  1. 2015上海网络赛 A Puzzled Elena
  2. 《matlab》Matlab程序设计
  3. DynDNS 遭到 DDoS 攻击,半个美国互联网瘫痪
  4. 修改 oracle 字符 zhs,oracle11g 修改字符集ZHS16GBK
  5. android小程序日历,微信小程序:日历功能实现
  6. 【前端】【vue.js】【参考项目】vue-konva-project
  7. Linux/Ubuntu 下使用USBasp下载程序(Atmel AVR or AT89S52 etc)
  8. 华为云云数据库RDS MySQL 版初试探【华为云至简致远
  9. 全球区块链第26周看点 | G20中方发言人:中国在数字货币、加密资产等领域做得较好...
  10. 如何让搜索引擎搜索到自己博客文章