特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过。如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/mao2080/

1、什么是AES

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),是一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。特性:对称加密。

2、加密解密方法

 package com.mao;

 import java.security.SecureRandom;

 import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec; import org.apache.commons.lang.StringUtils; /**
*
* 项目名称:---
* 模块名称:常用工具
* 功能描述:安全工具类
* 创建人: mao2080@sina.com
* 创建时间:2017年4月27日 下午5:33:24
* 修改人: mao2080@sina.com
* 修改时间:2017年4月27日 下午5:33:24
*/
public class SecurityUtil { /**AES算法key size*/
private static final int AES_KEY_SIZE = 128; /**AES算法*/
private static final String ALGORITHM = "AES"; /**AES-charset*/
private static final String AES_CHARSET = "UTF-8"; /**
*
* 描述:将字符串通过AES算法加密
* @author mao2080@sina.com
* @created 2017年4月7日 上午11:00:51
* @since
* @param content 需要加密的内容
* @param strkey 密钥
* @return 加密后字符串
* @throws Exception
*/
public static String EncryptByAES(String content, String strkey) throws Exception {
if (StringUtils.isBlank(strkey)) {
throw new Exception();
}
try {
KeyGenerator kgen = KeyGenerator.getInstance(SecurityUtil.ALGORITHM);
kgen.init(SecurityUtil.AES_KEY_SIZE, new SecureRandom(strkey.getBytes(SecurityUtil.AES_CHARSET)));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, SecurityUtil.ALGORITHM);
Cipher cipher = Cipher.getInstance(SecurityUtil.ALGORITHM);// 创建密码器
byte[] byteContent = content.getBytes(SecurityUtil.AES_CHARSET);
cipher.init(Cipher.ENCRYPT_MODE, key);//初始化
byte[] result = cipher.doFinal(byteContent);//加密
return SecurityUtil.parseByte2HexStr(result);
} catch (Exception e) {
throw new Exception();
}
} /**
*
* 描述:将字符串通过AES算法解密
* @author mao2080@sina.com
* @created 2017年4月7日 上午11:18:51
* @since
* @param content 需要解密的内容
* @param key 密钥
* @return
* @throws Exception
*/
public static String DecryptAES(String content, String strkey) throws Exception {
if (StringUtils.isBlank(strkey)) {
throw new Exception();
}
try {
byte[] decryptFrom = SecurityUtil.parseHexStr2Byte(content);
KeyGenerator kgen = KeyGenerator.getInstance(SecurityUtil.ALGORITHM);
kgen.init(SecurityUtil.AES_KEY_SIZE, new SecureRandom(strkey.getBytes(SecurityUtil.AES_CHARSET)));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, SecurityUtil.ALGORITHM);
Cipher cipher = Cipher.getInstance(SecurityUtil.ALGORITHM);//创建密码器
cipher.init(Cipher.DECRYPT_MODE, key);//初始化
return new String(cipher.doFinal(decryptFrom));
} catch (Exception e) {
throw new Exception();
}
} /**
*
* 描述:将二进制转换成16进制字符串
* @author mao2080@sina.com
* @created 2017年4月7日 上午10:55:48
* @since
* @param buf 二进制数组
* @return
* @throws Exception
*/
public static String parseByte2HexStr(byte buf[]) throws Exception {
if(buf == null){
throw new Exception();
}
StringBuffer sb = new StringBuffer();
for (int i = 0; i < buf.length; i++) {
String hex = Integer.toHexString(buf[i] & 0xFF);
if (hex.length() == 1) {
sb.append("0");
}
sb.append(hex);
}
return sb.toString();
} /**
*
* 描述:将16进制转换为二进制
* @author mao2080@sina.com
* @created 2017年4月7日 下午2:16:42
* @since
* @param hexStr 10进制字符串
* @return
* @throws Exception
*/
public static byte[] parseHexStr2Byte(String hexStr) throws Exception {
if (hexStr.length() < 1){
throw new Exception();
}
byte[] result = new byte[hexStr.length() / 2];
for (int i = 0; i < hexStr.length() / 2; i++) {
int hig = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
result[i] = (byte) (hig * 16 + low);
}
return result;
} public static void main(String[] args) throws Exception{
String aes = EncryptByAES("hello mao", "12345678");
System.out.println("AES加密:"+aes);
System.out.println("AES解密:"+DecryptAES(aes, "12345678"));
} }

3、运行结果

AES加密:775edd66a29a6849a98812199241f230
AES解密:hello mao

4、参考博客

http://www.cnblogs.com/vmax-tam/p/4624032.html

数据加密之AES的更多相关文章

  1. Android数据加密之Aes加密

    前言: 项目中除了登陆,支付等接口采用rsa非对称加密,之外的采用aes对称加密,今天我们来认识一下aes加密. 其他几种加密方式: Android数据加密之Rsa加密 Android数据加密之Aes ...

  2. 接口自动化--数据加密之AES

    在接口测试中,会遇到加密的请求数据,例如:常用的base64加密,AES加密,在这里,简述用Python转化AES的加密方法 原理 官网链接:https://pycryptodome.readthed ...

  3. Android数据加密之异或加密算法

    前言: 这几天被公司临时拉到去做Android IM即时通信协议实现,大致看了下他们定的协议,由于之前没有参与,据说因服务器性能限制,只达成非明文传递,具体原因我不太清楚,不过这里用的加密方式是采用异 ...

  4. Android数据加密之SHA安全散列算法

    前言: 对于SHA安全散列算法,以前没怎么使用过,仅仅是停留在听说过的阶段,今天在看图片缓存框架Glide源码时发现其缓存的Key采用的不是MD5加密算法,而是SHA-256加密算法,这才勾起了我的好 ...

  5. Android数据加密之Base64编码算法

    前言: 前面学习总结了平时开发中遇见的各种数据加密方式,最终都会对加密后的二进制数据进行Base64编码,起到一种二次加密的效果,其实呢Base64从严格意义上来说的话不是一种加密算法,而是一种编码算 ...

  6. Android数据加密之MD5加密

    前言: 项目中无论是密码的存储或者说判断文件是否是同一文件,都会用到MD5算法,今天来总结一下MD5加密算法. 什么是MD5加密? MD5英文全称“Message-Digest Algorithm 5 ...

  7. Android数据加密之Rsa加密

    前言: 最近无意中和同事交流数据安全传输的问题,想起自己曾经使用过的Rsa非对称加密算法,闲下来总结一下. 其他几种加密方式: Android数据加密之Rsa加密 Android数据加密之Aes加密 ...

  8. Android数据加密之Des加密

    前言: 端午节前有个同事咨询我有关Android DES加密的相关实现,简单的实现了一下,今天来总结一下. 其他几种加密方式: Android数据加密之Rsa加密 Android数据加密之Aes加密 ...

  9. AES对称加密算法原理

    原著:James McCaffrey 翻译:小刀人 原文出处:MSDN Magazine November 2003 (Encrypt It) 本文的代码下载:msdnmag200311AES.exe ...

随机推荐

  1. 【Lucene】小谈lucene的BooleanQuery查询对象

    BooleanQuery用于逻辑查询,即所谓的组合查询,具体的逻辑关系如下: 一个具体的使用测试,如下:

  2. html/css弹性布局的几大常用属性详解

    弹性布局的名称概念: 1.容器:需要添加弹性布局的父元素:项目:弹性布局容器中的每一个子元素,称为项目. 2.主轴:在弹性布局中,我们会通过属性规定水平/垂直方向(flex-direction)为主轴 ...

  3. Vue使用Elementui修改默认最快方法!

    相信大家都需要过,在Vue中使用Elementui的时候,遇到最多也最蛋疼的问题就是修改默认样式,接下来直奔主题: // template <el-progress :text-inside=& ...

  4. 使用HBuilder创建图表

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. abap 优化之ST05

    DATA: gt_mara TYPE TABLE OF mara. SELECT * INTO TABLE gt_mara FROM mara WHERE MATKL = 'L000001' %_hi ...

  6. 独热编码 pandas get_dummies

    映射技巧 将'income_raw'编码成数字值 income_mapping = {'<=50K': 0,'>50K': 1} income = income_raw.map(incom ...

  7. Array.reduce()方法

    Array.reduce()方法是对数组的遍历,返回一个单个返回值   使用方法: Array.reduce((acc, cur, idx, src) => { }, initialValue) ...

  8. Maven配置和使用

    Eclipse下的Maven开发环境搭建. 现在要用到Eclipse开发Maven的项目,需要配置Maven,简单整理下配置方法. 1.下载Maven安装包,http://maven.apache.o ...

  9. Linux编译阻塞型驱动遇到'TASK_NORMAL' undeclared (first use in this function)问题解决办法

    http://blog.csdn.net/qq_16405157/article/details/49281793

  10. kotlin面向对象之枚举、印章类

    枚举: 由于这个比较简单,直接上代码: 下面使用一下: 印章类[Sealed class]: 听着挺新鲜的,下面以一个具体的场景来对它进行学习: 动物园里有三个动物如下,在天黑时它们污污的在做“游戏” ...