Java 中 AES 加密算法实现

package com.julongtech.config.util;

import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;

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;

import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;
import org.apache.log4j.Logger;

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;

public class AESUtil {
private static final Logger logger = Logger.getLogger(DESUtil.class);
private static KeyGenerator keyGenerator = null;
/**
* AES加密
* @param data 加密字符串
* @param key 密钥 长度为8的倍数
* @return byte[]
* @author julong
* @QQ 330359149
* @Email koudailidexiaolong@163.com
* @date 2016-8-24上午11:57:04
*/
public static byte[] encryptMode(String data,String key){
try {
keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
//生成key
SecretKey secretKey = new SecretKeySpec(key.getBytes(), "AES");
byte[] bytes = secretKey.getEncoded();
//获取key
Key AESKey = new SecretKeySpec(bytes, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, AESKey);
return cipher.doFinal(data.getBytes());
} catch (Exception e) {
// TODO Auto-generated catch block
logger.error("【AESUtil】加密发生异常",e);
}
return null;
}

/**
* byte[]字符串转base64
* @param bytes
* @return String
* @author julong
* @QQ 330359149
* @Email koudailidexiaolong@163.com
* @date 2016-8-24下午01:52:36
*/
public static String encodeBase64(byte[] bytes){
return Base64.encode(bytes);
}
/**
* base64 转byte[]
* @param data
* @return byte[]
* @author julong
* @QQ 330359149
* @Email koudailidexiaolong@163.com
* @date 2016-8-24下午02:40:00
*/
public static byte[] decodeBase64(String data){
return Base64.decode(data);
}

/**
* AES解密算法
* @param data 加密数据
* @param key 密钥 长度为16的倍数
* @return byte[]
* @author julong
* @QQ 330359149
* @Email koudailidexiaolong@163.com
* @date 2016-8-24下午02:00:06
*/
public static byte[] decryptMode(byte[] data,String key){
try {
keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
//生成key
SecretKey secretKey = new SecretKeySpec(key.getBytes(), "AES");
byte[] bytes = secretKey.getEncoded();
//获取key
Key AESKey = new SecretKeySpec(bytes, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, AESKey);
return cipher.doFinal(data);
} catch (Exception e) {
// TODO: handle exception
logger.error("【AESUtil】解密发生异常",e);
}
return null;
}

/**
* 格式化为byte[] to String
* @param bytes
* @return String
* @author julong
* @QQ 330359149
* @Email koudailidexiaolong@163.com
* @date 2016-8-24下午02:02:29
*/
public static String formatByteToString(byte[] bytes){
return new String(bytes);
}


/**
* AES 加密
* @param data 加密的数据
* @param key 秘钥
* @return String
* @author julong
* @QQ 330359149
* @Email koudailidexiaolong@163.com
* @date 2016-8-24下午02:20:16
*/
public static String encrypt(String data,String key){
byte[] bytes = encryptMode(data, key);
return Base64.encode(bytes);
}

/**
* AES 解密
* @param data 加密的数据
* @param key 秘钥
* @return String
* @author julong
* @QQ 330359149
* @Email koudailidexiaolong@163.com
* @date 2016-8-24下午02:23:49
*/
public static String decrypt(String data,String key){
byte[] b = decodeBase64(data);
byte[] bytes = decryptMode(b, key);
return formatByteToString(bytes);
}

/**
* @param args
* @author julong
* @QQ 330359149
* @Email koudailidexiaolong@163.com
* @date 2016-8-24下午04:30:04
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

String str1 = AESUtil.encrypt("12345julong1222222DAADASDADASDASDQWEQWEQE131231313213121", "1111111100000000");
System.out.println(str1);
String str2 = AESUtil.decrypt(str1, "1111111100000000");
System.out.println(str2);
}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值