java版AES加密算法实现
Posted bitcarmanlee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java版AES加密算法实现相关的知识,希望对你有一定的参考价值。
项目中需要用到AES算法加密,写了个可用的工具类,做一下记录。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.SecretKeySpec;
public class AESUtils {
private static final Logger logger = LoggerFactory.getLogger(AESUtils.class);
// 默认全部使用ECB模式的对称加密(主要是因为ECB模块适合并行计算)
private static final String ALGORITHM_PADDING = "AES/ECB/PKCS5Padding";
private static final String ALGORITHM_NAME = "AES";
private static KeyGenerator sKeyGen;
static {
try {
sKeyGen = KeyGenerator.getInstance(ALGORITHM_NAME);
sKeyGen.init(128);
} catch (Exception e) {
logger.error("AES init exception:", e);
}
}
/**
* 加密方法
*
* @param content
* @param password
* @return
*/
private static byte[] encrypt(String content, byte[] password) {
try {
SecretKeySpec key = new SecretKeySpec(password, ALGORITHM_NAME);
Cipher cipher = Cipher.getInstance(ALGORITHM_PADDING);
byte[] byteContent = content.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE, key);
return cipher.doFinal(byteContent);
} catch (Exception e) {
logger.error("AES encrypt exception:", e);
}
return null;
}
/**
* 解密方法
*
* @param content
* @param password
* @return
*/
private static byte[] decrypt(byte[] content, byte[] password) {
try {
SecretKeySpec key = new SecretKeySpec(password, ALGORITHM_NAME);
Cipher cipher = Cipher.getInstance(ALGORITHM_PADDING);
cipher.init(Cipher.DECRYPT_MODE, key);
return cipher.doFinal(content);
} catch (Exception e) {
logger.error("AES decrypt exception:", e);
}
return null;
}
/**
* 字符串转换为二进制字节数组
*
* @param hexStr
* @return
*/
public static byte[] parseHexStr2Byte(String hexStr) {
if (hexStr == null || hexStr.length() < 1) {
return null;
}
byte[] result = new byte[hexStr.length() / 2];
for (int i = 0; i < hexStr.length() / 2; i++) {
int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2),
16);
result[i] = (byte) (high * 16 + low);
}
return result;
}
/**
* 二进制字节数组转换为字符串
*
* @param bytes
* @return
*/
public static String byteArray2HexString(byte[] bytes) {
if (null == bytes) {
return "";
}
StringBuilder hexString = new StringBuilder();
for (byte b : bytes) {
String str = Integer.toHexString(0xFF & b);
while (str.length() < 2) {
str = "0" + str;
}
hexString.append(str);
}
return hexString.toString();
}
/**
* 加密主方法
*
* @param content
* @param key
* @return
*/
public static String encode(String content, byte[] key) {
return byteArray2HexString(encrypt(content, key));
}
/**
* 解密主方法
*
* @param content
* @param key
* @return
*/
public static String decode(String content, byte[] key) {
byte[] b = decrypt(parseHexStr2Byte(content), key);
return new String(b);
}
}
使用的时候,加密直接调用encode方法,解密的时候调用decode方法。
以上是关于java版AES加密算法实现的主要内容,如果未能解决你的问题,请参考以下文章
用JAVA实现了AES128加密,求用C语言解密的代码,谢谢各位大神了!