import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
/**
* AES加解密解密
*/
public class AesUtil
{
/**
* 私有构造方法<默认构造函数>
*/
private AesUtil()
{
}
/**
* 算法/模式/补码方式
*/
private static final String SECRET = "AES/ECB/PKCS5Padding";
/**
* AES 加密
* @param sSrc
* @param iv
* @param sKey
* @return
* @throws Exception
*/
public static String Encrypt(String sSrc, String iv, String sKey)
{
try
{
//判断Key是否为空
if (sKey == null)
{
return null;
}
// 判断Key是否为16位
if (sKey.length() != 16)
{
return null;
}
byte[] raw = sKey.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance(SECRET);
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(sSrc.getBytes());
return Base64.encodeBase64String(encrypted);//此处使用BAES64做转码功能,同时能起到2次加密的作用。
}
catch (Exception e)
{
LoggerManager.error(AesUtil.class, e, "AES加密失败:{}", sSrc);
return null;
}
}
/**
* AES 解密
* @param sSrc
* @param iv
* @param sKey
* @return
* @throws Exception
*/
public static String Decrypt(String sSrc, String iv, String sKey)
{
try
{
// 判断Key是否正确
if (sKey == null)
{
return null;
}
// 判断Key是否为16位
if (sKey.length() != 16)
{
return null;
}
byte[] raw = sKey.getBytes("utf8");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance(SECRET);
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
//先用bAES64解密
byte[] encrypted1 = Base64.decodeBase64(sSrc);
try
{
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original);
return originalString;
}
catch (Exception e)
{
LoggerManager.error(AesUtil.class, e, "AES解密失败:{}", sSrc);
return null;
}
}
catch (Exception ex)
{
LoggerManager.error(AesUtil.class, ex, "bAES64解密失败:{}", sSrc);
return null;
}
}
}
java AES加密解密
最新推荐文章于 2024-08-02 07:30:00 发布