加密规则:
算法:ECB
密钥长度:128
密钥:1234567890123456
补码:PKCS5Padding
加密后编码:base64
/**
*
*/
package com.online.charge.publishes.bank.AESEncrypt;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Arrays;
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.binary.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import com.sun.tools.javac.util.Convert;
/**
* @author ls
*
*/
public class AESEncrypt {
final static Logger logger = LoggerFactory.getLogger(AESEncrypt.class);
//加密参数
private static final String AES_ALG = "AES";
//密钥长度
private static final int DEFAULT_AES_KEYSIZE = 128;
private static final String CODING_TYPE = "utf-8";
//算法模式、补码方式(填充类型)
private static final String AES_TYPE = "AES/ECB/PKCS5Padding";
//私钥,AES固定格式为128/192/256 bits.即:16/24/32bytes。DES固定格式为128bits,即8bytes。
private static final String AES_KEY = "1234567890123456";
/**
* AES加密字符串
*
* @param content
* 需要被加密的字符串
* @return 密文
*/
public static String encrypt(String content) {
try {
logger.info("加密前明文:"+content);
System.out.println("加密前明文:"+content);
SecretKeySpec key = new SecretKeySpec(Arrays.copyOf(AES_KEY.getBytes(CODING_TYPE), 16), "AES");
Cipher cipher = Cipher.getInstance(AES_TYPE);// 创建密码器
byte[] byteContent = content.getBytes(CODING_TYPE);
// 初始化为加密模式的密码器,非ECB类型的可以在第三个参数传递偏移量zeroIv,ECB没有偏移量
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] byteResult = cipher.doFinal(byteContent);// 加密
//将加密后的数组转为字符串
String result = new Base64().encodeToString(byteResult);
logger.info("加密后密文:"+result);
System.out.println("加密后密文:"+result);
return result;
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
/**
* 解密AES加密过的字符串
*
* @param content
* AES加密过过的内容
* @return 明文
*/
public static String decrypt(String content) {
try {
logger.info("解密前密文:"+content);
System.out.println("解密前密文:"+content);
//处理URL中参数+号变空格问题
String a = content.replaceAll(" ", "+");
SecretKeySpec key = new SecretKeySpec(Arrays.copyOf(AES_KEY.getBytes(CODING_TYPE), 16), "AES");
Cipher cipher = Cipher.getInstance(AES_TYPE);// 创建密码器
cipher.init(Cipher.DECRYPT_MODE, key);// 初始化为解密模式的密码器
//加密的字符串转为二进制数组
byte[] byte_content = Base64.decodeBase64(a);
//解密
byte[] byteResult = cipher.doFinal(byte_content);
//解密后的数组转为字符串
String result=new String(byteResult,CODING_TYPE);
logger.info("解密后明文:"+result);
System.out.println("解密后明文:"+result);
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 (IOException e) {
e.printStackTrace();
}
return null;
}
}