数据加密之AES
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、参考博客
数据加密之AES的更多相关文章
- Android数据加密之Aes加密
前言: 项目中除了登陆,支付等接口采用rsa非对称加密,之外的采用aes对称加密,今天我们来认识一下aes加密. 其他几种加密方式: Android数据加密之Rsa加密 Android数据加密之Aes ...
- 接口自动化--数据加密之AES
在接口测试中,会遇到加密的请求数据,例如:常用的base64加密,AES加密,在这里,简述用Python转化AES的加密方法 原理 官网链接:https://pycryptodome.readthed ...
- Android数据加密之异或加密算法
前言: 这几天被公司临时拉到去做Android IM即时通信协议实现,大致看了下他们定的协议,由于之前没有参与,据说因服务器性能限制,只达成非明文传递,具体原因我不太清楚,不过这里用的加密方式是采用异 ...
- Android数据加密之SHA安全散列算法
前言: 对于SHA安全散列算法,以前没怎么使用过,仅仅是停留在听说过的阶段,今天在看图片缓存框架Glide源码时发现其缓存的Key采用的不是MD5加密算法,而是SHA-256加密算法,这才勾起了我的好 ...
- Android数据加密之Base64编码算法
前言: 前面学习总结了平时开发中遇见的各种数据加密方式,最终都会对加密后的二进制数据进行Base64编码,起到一种二次加密的效果,其实呢Base64从严格意义上来说的话不是一种加密算法,而是一种编码算 ...
- Android数据加密之MD5加密
前言: 项目中无论是密码的存储或者说判断文件是否是同一文件,都会用到MD5算法,今天来总结一下MD5加密算法. 什么是MD5加密? MD5英文全称“Message-Digest Algorithm 5 ...
- Android数据加密之Rsa加密
前言: 最近无意中和同事交流数据安全传输的问题,想起自己曾经使用过的Rsa非对称加密算法,闲下来总结一下. 其他几种加密方式: Android数据加密之Rsa加密 Android数据加密之Aes加密 ...
- Android数据加密之Des加密
前言: 端午节前有个同事咨询我有关Android DES加密的相关实现,简单的实现了一下,今天来总结一下. 其他几种加密方式: Android数据加密之Rsa加密 Android数据加密之Aes加密 ...
- AES对称加密算法原理
原著:James McCaffrey 翻译:小刀人 原文出处:MSDN Magazine November 2003 (Encrypt It) 本文的代码下载:msdnmag200311AES.exe ...
随机推荐
- Git复习(三)之分支管理、分支策略
创建合并删除分支 我们知道每次提交git都会将他们串成一条线,这条时间线就是一个分支.在git里这条时间线叫做主分支,即master分支 HEAD指向master,master指向最新的提交,所以,H ...
- java实现spark常用算子之mapPartitions
import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...
- java读取blob全身乱码
一.BLOB操作 .入库 ()JDBC方式 //通过JDBC获得数据库连接 Class.forName("oracle.jdbc.driver.OracleDriver"); Co ...
- Linux配置nginux
安装依赖 yum install gcc yum install pcre-devel yum install zlib zlib-devel yum install openssl openssl- ...
- 26、Nginx Uwsgi代理
1.Uwsgi代理基本概述 cgi.fastcgi.wsgi.uwsgi python框架 Django是一个开放源代码的web的框架 Flask是一个使用python编写的轻量级web应用框架 2 ...
- Qt Creator 4.10 Beta版发布
使用Qt Creator 4.10 Beta,现在支持固定文件,因此即使在关闭所有文件时它们仍然保持打开状态,围绕语言服务器协议支持继续集成,将Android目标添加到CMake/Qbs项目,支持Bo ...
- kotlin面向对象之接口、代理与委托、单例模式
接口: 对于什么是接口这里就不概述了,跟java中的概念一样,下面直接上代码进行操练: 而男人跟女人的接口当然也是不同的,很显然男人跟女人最大的差别就是拥有"小弟弟"[我黄我暴利] ...
- npm安装node-sass报msbuild相关错误的解决办法
转自:https://blog.csdn.net/Amio_/article/details/87931733 https://www.cnblogs.com/diffx/p/10510868.htm ...
- 高性能mysql 第5章 创建高可用的索引
b-tree索引 一定程度上说,mysql只有b-tree索引.他没有bitmap索引.还有一个叫hash索引的,只在Memory存储引擎中才有. b-tree索引跟oracle中的大同小异. mys ...
- PyPy初体验
PyPy初体验 PyPy安装 1.下载 下载地址:http://pypy.org/download.html(温馨提示:需要梯子) 下载PyPy3.6 64bit Ubuntu版本 解压 下载下来的文 ...