Java AES加密算法工具类
AESCodec.java
package util; import java.security.Key; import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; public class AESCodec { // 密钥算法
private static final String KEY_ALGORITHM = "AES"; // 加解密算法/工作模式/填充方式,Java6.0支持PKCS5Padding填充方式,BouncyCastle支持PKCS7Padding填充方式
private static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding"; // 默认key
private static final String KEY = "fFK/B5sFXeITk6cXV5rTNA=="; /**
* 生成密钥
*/
public static String initkey() throws Exception { // 实例化密钥生成器
KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM); // 初始化密钥生成器:AES要求密钥长度为128,192,256位
kg.init(128); // 生成密钥
SecretKey secretKey = kg.generateKey(); // 获取二进制密钥编码形式
return Base64.encodeBase64String(secretKey.getEncoded());
} /**
* 转换密钥
*/
public static Key toKey(byte[] key) throws Exception {
return new SecretKeySpec(key, KEY_ALGORITHM);
} /**
* 加密数据
*
* @param data 待加密数据
* @param key 密钥
* @return 加密后的数据
* */
public static String encrypt(String data, String key) throws Exception { // 还原密钥
Key k = toKey(Base64.decodeBase64(key)); // 使用PKCS7Padding填充方式,这里就得这么写了(即调用BouncyCastle组件实现) // 实例化Cipher对象,它用于完成实际的加密操作
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); // 初始化Cipher对象,设置为加密模式
cipher.init(Cipher.ENCRYPT_MODE, k); // 执行加密操作。加密后的结果通常都会用Base64编码进行传输
return Base64.encodeBase64String(cipher.doFinal(data.getBytes()));
} /**
* 解密数据
*
* @param data 待解密数据
* @param key 密钥
* @return 解密后的数据
* */
public static String decrypt(String data, String key) throws Exception {
Key k = toKey(Base64.decodeBase64(key));
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); // 初始化Cipher对象,设置为解密模式
cipher.init(Cipher.DECRYPT_MODE, k); // 执行解密操作
return new String(cipher.doFinal(Base64.decodeBase64(data)));
} /**
* 加密数据
*
* @param data 待加密数据
* @param key 密钥
* @return 加密后的数据
* */
public static String encrypt(String data) throws Exception {
return encrypt(data, KEY);
} /**
* 解密数据
*
* @param data 待解密数据
* @param key 密钥
* @return 解密后的数据
* */
public static String decrypt(String data) throws Exception {
return decrypt(data, KEY);
} public static void main(String[] args) throws Exception {
// System.out.println("key: " + initkey());
String data = "123456"; String encrypt = encrypt(data);
System.out.println(encrypt);
System.out.println(decrypt(encrypt)); }
}
Java AES加密算法工具类的更多相关文章
- Java AES 加密工具类
package com.microwisdom.utils; import java.security.NoSuchAlgorithmException; import java.security.S ...
- Java MD5加密算法工具类
MD5.java package util; import java.security.MessageDigest; import java.security.NoSuchAlgorithmExcep ...
- HttpTool.java(在java tool util工具类中已存在) 暂保留
HttpTool.java 该类为java源生态的http 请求工具,不依赖第三方jar包 ,即插即用. package kingtool; import java.io.BufferedReader ...
- java文件处理工具类
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedRead ...
- java格式处理工具类
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...
- Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类
Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类 =========================== ©Copyright 蕃薯耀 2017年9月25日 http://www ...
- Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类
Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...
- 使用java的Calendar工具类获取到本月的第一天起始时间和最后一天结束时间。
1.使用java的Calendar工具类获取到本月的第一天起始时间和最后一天结束时间. package com.fline.aic.utils; import java.text.DateFormat ...
- JAVA 8 日期工具类
JAVA 8 日期工具类 主题描述 JAVA中日期时间的历史 代码成果 主题描述 JAVA的日期时间一直比较混乱,本来以为joda会是巅峰,但是JAVA 8改变了我的思想.但是即便在JAVA 8面前, ...
随机推荐
- hdu 1729 Stone Game
Stone Game HDU - 1729 题意: 给定n个箱子,每个箱子的容量为si,每个箱子里最初有ci个石子,每次放入石子不能超过放入前的石子数的平方,谁无法继续放入石子就算输. /* 这是 ...
- hdu3887 Counting Offspring
Counting Offspring HDU - 3887 问你对于每个节点,它的子树上标号比它小的点有多少个 /* 子树的问题,dfs序可以很轻松的解决,因为点在它的子树上,所以在线段树中,必定在它 ...
- [转] 出现( linker command failed with exit code 1)错误总结
这种问题,通常出现在添加第三方库文件或者多人开发时. 这种问题一般是找不到文件而导致的链接错误. 我们可以从如下几个方面着手排查. 1.以如下错误为例,如果是多人开发,你同步完成后发现出现如下的错误. ...
- Exadata中Infiniband交换机升级
Infiniband交换机的软件补丁包,随着软件版本的不同,其发布方式也有所变化,从如下图表可以看出,1.3.3-2这个版本是一个分水岭,这个版本及以前的版本,补丁包是单独下载的,而之后的版本,inf ...
- windows srver 显示桌面图标。
rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0
- Shell变量赋值语句不能有空格
a = 1是错的!!!!!只有 a=1才是正确的.
- Sqoop概述
sqoop Sqoop 是传统数据库与 Hadoop 之间数据同步的工具,它是 Hadoop 发展到一定程度的必然产物,它主要解决的是传统数据库和Hadoop之间数据的迁移问题.这节课我们将详细介绍 ...
- Oracle视图,索引,序列
什么是视图[View] (1)视图是一种虚表 (2)视图建立在已有表的基础上, 视图赖以建立的这些表称为基表(3)向视图提供数据内容的语句为 SELECT 语句,可以将视图理解为存储起来的 SELEC ...
- 从零开始的全栈工程师——js篇2.13(字符串与数组的方法)
基类Object的子类有 Function Array Number Boolean String Date Math RegExp 函数 数组 数字 布尔 字符串 日期 算数 正则 都 ...
- mysql数据库初步了解
一丶数据库服务器丶数据管理系统丶数据库丶表与记录的关系 记录:1 xxxx 3245646546(多个字段的信息组成一条记录,即文件中的一行内容) 表: Student.school,class_li ...