AES 加密
在日常工作中,经常会用到加密算法,这里我们记录下这个加密工具的使用。 直接看到代码吧:
以下是 16 长度的秘钥:
package com.topinfo.ci.netty.utils;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
/**
*@Description: AES加密和解密工具类
*@Author:杨攀
*@Since:2019年9月16日上午11:29:35
*/
public class AESUtil {
// AES secretKey length (must be 16 bytes)
public static final String secretKey = "TAZWSXEDCRFVTGBG";
// 字符串编码
private static final String KEY_CHARSET = "UTF-8";
// 算法方式
private static final String KEY_ALGORITHM = "AES";
// 算法/模式/填充
private static final String CIPHER_ALGORITHM_CBC = "AES/CBC/PKCS5Padding";
// 私钥大小128/192/256(bits)位 即:16/24/32bytes,暂时使用128,如果扩大需要更换java/jre里面的jar包
private static final Integer PRIVATE_KEY_SIZE_BIT = 128;
private static final Integer PRIVATE_KEY_SIZE_BYTE = 16;
/**
*@Description: 加密
*@Author:杨攀
*@Since: 2019年9月17日上午10:17:18
*@param plainText 明文:要加密的内容
*@return 密文:加密后的内容,如有异常返回空串:""
*/
public static String encrypt(String plainText) {
return encrypt(secretKey, plainText);
}
/**
*@Description: 加密
*@Author:杨攀
*@Since: 2019年9月12日下午7:09:31
* @param secretKey 密钥:加密的规则 16位
* @param plainText 明文:要加密的内容
* @return cipherText 密文:加密后的内容,如有异常返回空串:""
*/
public static String encrypt(String secretKey, String plainText) {
if (secretKey.length() != PRIVATE_KEY_SIZE_BYTE) {
throw new RuntimeException("AESUtil:Invalid AES secretKey length (must be 16 bytes)");
}
// 密文字符串
String cipherText = "";
try {
// 加密模式初始化参数
Cipher cipher = initParam(secretKey, Cipher.ENCRYPT_MODE);
// 获取加密内容的字节数组
byte[] bytePlainText = plainText.getBytes(KEY_CHARSET);
// 执行加密
byte[] byteCipherText = cipher.doFinal(bytePlainText);