java 实现aes解密加密
时间: 2023-04-03 15:05:01 浏览: 154
可以使用 javax.crypto 库中的 Cipher 类来实现 AES 加密和解密。具体步骤如下:
1. 创建 Cipher 对象,指定加密或解密模式,以及密钥和初始化向量(IV)。
2. 创建 SecretKeySpec 对象,将密钥转换为 AES 密钥。
3. 如果需要,创建 IvParameterSpec 对象,将初始化向量转换为 AES 初始化向量。
4. 调用 Cipher 对象的 init() 方法,传入加密或解密模式、密钥和初始化向量。
5. 调用 Cipher 对象的 doFinal() 方法,传入要加密或解密的数据,返回加密或解密后的结果。
需要注意的是,AES 加密和解密的密钥长度必须为 16、24 或 32 字节,而初始化向量长度必须为 16 字节。另外,加密和解密时使用的密钥和初始化向量必须相同。
示例代码如下:
```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";
public static byte[] encrypt(byte[] data, byte[] key, byte[] iv) throws Exception {
Cipher cipher = Cipher.getInstance(ALGORITHM);
SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(iv);
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
return cipher.doFinal(data);
}
public static byte[] decrypt(byte[] data, byte[] key, byte[] iv) throws Exception {
Cipher cipher = Cipher.getInstance(ALGORITHM);
SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(iv);
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
return cipher.doFinal(data);
}
}
```
使用示例:
```java
byte[] key = "0123456789abcdef".getBytes(CHARSET);
byte[] iv = "0123456789abcdef".getBytes(CHARSET);
byte[] data = "hello world".getBytes(CHARSET);
byte[] encrypted = AesUtil.encrypt(data, key, iv);
byte[] decrypted = AesUtil.decrypt(encrypted, key, iv);
System.out.println(new String(encrypted, CHARSET)); // 输出加密后的数据
System.out.println(new String(decrypted, CHARSET)); // 输出解密后的数据
```
阅读全文