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面前, ...
随机推荐
- bzoj3681: Arietta(网络流)
传送门 主席树优化建图? 然而我连代码都看不懂 贴个题解好了->这里 //minamoto #include<iostream> #include<cstdio> #in ...
- css 实现三级联动菜单
昨天因为项目中想要把二级联动菜单改成三级联动菜单,所以我就单独写了一个tab导航栏,用纯css的方式实现的三级联动.一开始我想着可以用js实现,但是js的hover事件和mouseenter,mous ...
- thinkphp5文件上传问题
tp5中文件上传如果没有数据就会报错,所以要先做一个判断 //先接收文件数据 $isfile=$_FILES;//判断是否上传图片数据,如果没有上传数据二位数组中的name会为空,如下例:if($is ...
- 消息中间件 | 消息协议 | MQTT3.1.1 -- 《分布式 消息中间件实践》笔记
1999年,IBM和合作伙伴共同发明MQTT协议 14年,MQTT正式成为推荐的物联网传输协议标准 常应用于很多机器计算能力有限.底带宽.网络不可靠的远程通信应用场景中. 主要概念 MQT ...
- spring框架详细课程视频
https://ke.qq.com/course/27346#term_id=100012852
- jquery——下载、使用
jQuery是目前使用最广泛的javascript函数库. 怎样安装? 这是下载地址:https://code.jquery.com/ minified是压缩版的 新建一个网页打开上面这个网址,ctr ...
- CodeForces - 95B
Petya loves lucky numbers. Everybody knows that positive integers are lucky if their decimal represe ...
- Python 配置文件加载且自动更新(watchdog)
安装依赖:pip install watchdog #!/usr/bin/env python3 # -*- coding: utf-8 -*- import logging import os im ...
- Java的compare比较
package com.jckb; public class Name implements Comparable<Name>{ private String firstName; pri ...
- Mybatis与Ibatis的区别
Mybatis与Ibatis的区别: 1.Mybatis实现了接口绑定,使用更加方便 在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件, 而Mybatis实现了DAO接口 ...