AES加密解密 SHA1、SHA加密 MD5加密
二话不说马上附上代码:
~~~
package com.luo.util;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class DecriptUtil {
/**
* @author:罗国辉
* @date: 2015年12月17日 上午9:16:22
* @description: AES加密
* @parameter: str:待加密字符串,secretKeyBase:用于生成密钥的基础字符串
* @return: 加密字节数组
**/
public static byte[] encryptAES(String str, String secretKeyBase) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(secretKeyBase.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES");// 创建密码器
byte[] byteContent = str.getBytes("UTF-8");
cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
byte[] result = cipher.doFinal(byteContent);
return result; // 加密
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
/**
* @author:罗国辉
* @date: 2015年12月17日 上午9:16:22
* @description: AES解密
* @parameter: strByteArray:待解密字节数组,
* @parameter: secretKeyBase:用于生成密钥的基础字符串, 需要注意的是EAS是对称加密,所以secretKeyBase在加密解密时要一样的
* @return: 解密后字符串
**/
public static String decryptAES(byte[] strByteArray, String secretKeyBase) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(secretKeyBase.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES");// 创建密码器
cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
String result = new String(cipher.doFinal(strByteArray),"UTF-8");
return result; // 加密
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
/**
* @author:罗国辉
* @date: 2015年12月17日 上午9:24:43
* @description: SHA、SHA1加密
* @parameter: str:待加密字符串
* @return: 加密串
**/
public static String SHA1(String str) {
try {
MessageDigest digest = java.security.MessageDigest
.getInstance("SHA-1"); //如果是SHA加密只需要将"SHA-1"改成"SHA"即可
digest.update(str.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuffer hexStr = new StringBuffer();
// 字节数组转换为 十六进制 数
for (int i = 0; i < messageDigest.length; i++) {
String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
if (shaHex.length() < 2) {
hexStr.append(0);
}
hexStr.append(shaHex);
}
return hexStr.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
/**
* @author:罗国辉
* @date: 2015年12月17日 上午9:24:43
* @description: MD5加密
* @parameter: str:待加密字符串
* @return: 加密串
**/
public static String MD5(String str) {
try {
// 获得MD5摘要算法的 MessageDigest 对象
MessageDigest mdInst = MessageDigest.getInstance("MD5");
// 使用指定的字节更新摘要
mdInst.update(str.getBytes());
// 获得密文
byte[] md = mdInst.digest();
// 把密文转换成十六进制的字符串形式
StringBuffer hexString = new StringBuffer();
// 字节数组转换为 十六进制 数
for (int i = 0; i < md.length; i++) {
String shaHex = Integer.toHexString(md[i] & 0xFF);
if (shaHex.length() < 2) {
hexString.append(0);
}
hexString.append(shaHex);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}
}
~~~
- 前言
- Java生成中间logo的二维码(还可以加上二维码名称哦)
- Java我的高效编程之常用函数
- AES加密解密&&SHA1、SHA加密&&MD5加密
- Java中synchronized的使用实例
- Java基础之集合
- Java基础之泛型
- Java基础之枚举妙用
- 那些年用过的一些前端框架
- 关于正则,那些年一直存在的疑惑解答(正则菜鸟不容错过)
- 给pdf文件添加防伪水印logo(附工程源码下载)
- SpringMVC+BUI实现文件上传(附详解,源码下载)
- Java异常封装(自己定义错误码和描述,附源码)
- javaweb异常提示信息统一处理(使用springmvc,附源码)
- 关于Java,那些我心存疑惑的事(不断更新中...)
- 深入Java虚拟机(1)——Java体系结构
- 深入Java虚拟机(2)——Java的平台无关性
- 深入Java虚拟机(3)——安全
- 深入Java虚拟机(4)——网络移动性
- Linux文件编辑命令详细整理
- 阿里云服务器云数据库免费体验(Java Web详细实例)
- 项目部署、配置、查错常用到的Linux命令
- Shell脚本了解
- Ajax原理学习
- linux下安装apache(httpd-2.4.3版本)各种坑
- JSP九大内置对象
- Servlet再度学习
- 开发人员系统功能设计常用办公软件分享
- java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener问题解决
- tomcat内存溢出解决,java.lang.OutOfMemoryError: PermGen space
- 《Java多线程编程核心技术》推荐
- 关于跳槽,是我心浮气躁?还是我确实该离开了?
- Java I/O学习(附实例和详解)
- Java经典设计模式之五大创建型模式(附实例和详解)
- Java经典设计模式之七大结构型模式(附实例和详解)
- Java经典设计模式之十一种行为型模式(附实例和详解)
- Java内存管理
- SQL实例整理
- 数据库面试常问的一些基本概念