AES 加解密以及异常情况处理
加解密过程中,记得数据中的空格处理,这里会有个大坑,解密前要处理字符串前后端的空格,解密后也要处理字符串前后端的空格
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 加解密以及异常情况处理相关推荐
- 数据採集器服务——Socket(今天才发现AES加解密代码跟贴的时候不一样,貌似乱码,不知什么情况)...
近期刚做的一个项目.关于 Socket TCP 通信. 需求方提供了一个 ARM 机器,及数据採集器,须要我做一个服务端与数据採集器进行交互. 目的: 数据採集器:定时将读取到的数据发送到服务端. 服 ...
- openssl c++实现bouncycastle中AES加解密
0x01 为什么要用bouncycastle 先说说JCE(Java Cryptography Extension)是一组包,它们提供用于加密.密钥生成和协商以及 Message Authentica ...
- AES加解密算法详解
0 AES简介 美国国家标准技术研究所在2001年发布了高级加密标准(AES).AES是一个对称分组密码算法,旨在取代DES成为广泛使用的标准. 根据使用的密码长度,AES最常见的有3种方案,用以适应 ...
- Java使用AES加解密
Java使用AES加解密 目录 1.1生成密钥 1.2密钥的存储 1.3获取存储的密钥 1.4加解密 1.5使用存储的密钥进行加解密示例 AES是一种对称的加密算法,可基于相同的密钥进行加密和解密.J ...
- JS逆向加解密——python 实现AES加解密
前言 写爬虫项目,做JS逆向或者APP逆向时,经常遇到网站的很多参数都经过AES加密解密,用python实现AES加解密是非常简单的,免去了扣JS代码,并且实现格式固定,所以本文提供实现好的AES加解 ...
- 安卓AES加解密(兼容Android7.0)
相关参考## http://blog.csdn.net/q4878802/article/details/76690493 http://blog.csdn.net/drkcore/article/d ...
- C语言实现AES加解密
C语言实现AES加解密 AES算法 具体代码 AES算法 (AES)RIJNDAEL算法是一个数据块长度盒密钥长度都可变的分组加密算法,其数据块长度和密钥长度都可独立地选定为大于等于128位且小于等于 ...
- Java code lib aes 加解密
Java aes 加解密 /*** Created by LvJianwei on 2018/2/8.*/import javax.crypto.Cipher; import javax.crypto ...
- 前端 crypto-js aes 加解密
背景 前段时间公司做项目,该项目涉及到的敏感数据比较多,经过的一波讨论之后,决定前后端进行接口加密处理,采用的是 AES + BASE64 算法加密~ 网上关于 AES 对称加密的算法介绍看上一篇! ...
最新文章
- Vue 组件间通信方法汇总
- JavaWeb课程复习资料(十)——修改功能
- 计算机专硕专业课单科分数线,计算机考研|这两所自划线,单科没过线也能复试?...
- 编译原理 —— 1.1 什么是编译
- 有的歌声音大有的歌声音小_手机听筒声音小怎么办?别急,只需一把刷子
- Python图像匹配
- 图灵在计算机科学方面主要贡献,图灵在计算机理论方面的贡献
- 三国志·魏书·牵招传
- Python实现线性函数的拟合算法
- QOS端口限速EMAIL流量限速
- 运用Python 模拟太阳-地球-月亮运动模型
- springboot文件上传 Required request part 'file' is not present
- python3 爬虫神器pyquery的使用实例之爬网站图片
- GoLang下载安装
- 基于uni-app开发的一款视频播放器插件
- DFT(离散傅里叶变换)
- Shiro实现session限制登录数量踢人下线
- 三维shepp_logan头模型的投影数据的产生
- Azure Blob 存储
- 物联网会成为移动互联网的下一个红海市场吗
热门文章
- 2015上海网络赛 A Puzzled Elena
- 《matlab》Matlab程序设计
- DynDNS 遭到 DDoS 攻击,半个美国互联网瘫痪
- 修改 oracle 字符 zhs,oracle11g 修改字符集ZHS16GBK
- android小程序日历,微信小程序:日历功能实现
- 【前端】【vue.js】【参考项目】vue-konva-project
- Linux/Ubuntu 下使用USBasp下载程序(Atmel AVR or AT89S52 etc)
- 华为云云数据库RDS MySQL 版初试探【华为云至简致远
- 全球区块链第26周看点 | G20中方发言人:中国在数字货币、加密资产等领域做得较好...
- 如何让搜索引擎搜索到自己博客文章