java aes key iv_JAVA_AES_的加解密
时间: 2023-08-04 17:09:40 浏览: 138
您好!关于Java AES加解密,需要使用到密钥和初始化向量(IV)。下面是一个简单的示例代码:
```java
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
public class AesUtil {
private static final String ALGORITHM = "AES/CBC/PKCS5Padding"; // 加密算法
private static final String CHARSET = "UTF-8"; // 编码方式
/**
* 加密方法
*
* @param content 待加密字符串
* @param key 密钥
* @param iv 初始化向量
* @return 加密后的字符串
* @throws Exception
*/
public static String aesEncrypt(String content, String key, String iv) throws Exception {
Cipher cipher = Cipher.getInstance(ALGORITHM);
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(CHARSET), "AES");
IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes(CHARSET));
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
byte[] encrypted = cipher.doFinal(content.getBytes(CHARSET));
return Base64.getEncoder().encodeToString(encrypted);
}
/**
* 解密方法
*
* @param content 待解密字符串
* @param key 密钥
* @param iv 初始化向量
* @return 解密后的字符串
* @throws Exception
*/
public static String aesDecrypt(String content, String key, String iv) throws Exception {
Cipher cipher = Cipher.getInstance(ALGORITHM);
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(CHARSET), "AES");
IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes(CHARSET));
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(content));
return new String(decrypted, CHARSET);
}
}
```
其中,`aesEncrypt` 方法用于加密,`aesDecrypt` 方法用于解密。`key` 和 `iv` 参数分别为密钥和初始化向量,需要使用相同的 `key` 和 `iv` 才能成功解密。
使用示例:
```java
public static void main(String[] args) throws Exception {
String content = "Hello, AES!";
String key = "1234567890123456"; // 密钥长度必须为16/24/32位
String iv = "1234567890123456"; // 初始化向量长度必须为16位
String encrypted = AesUtil.aesEncrypt(content, key, iv);
System.out.println("加密后:" + encrypted);
String decrypted = AesUtil.aesDecrypt(encrypted, key, iv);
System.out.println("解密后:" + decrypted);
}
```
输出结果:
```
加密后:dS7U2yvJg3GRVTzB+TcHAA==
解密后:Hello, AES!
```
注意,密钥长度必须为16/24/32位,初始化向量长度必须为16位。此外,加密算法使用的是`AES/CBC/PKCS5Padding`,这是一种安全可靠的加密方式,能够保证数据的机密性和完整性。
阅读全文