如何在Java中正确实现AES-256加密算法?
时间: 2024-12-14 13:22:07 浏览: 8
在Java中实现AES-256加密算法通常需要使用`javax.crypto.Cipher`和`javax.crypto.spec.SecretKeySpec`类。以下是基本步骤:
1. 导入必要的包:
```java
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.util.Base64;
```
2. 获取密钥(这里假设你已经有了一个256位的密钥,例如从Base64解码得到`byte[] keyBytes = Base64.getDecoder().decode("your_encoded_key");`):
```java
Key secretKey = new SecretKeySpec(keyBytes, "AES");
```
注意选择正确的算法名称,这里是"AES"。
3. 初始化Cipher对象并设置操作模式(ENCRYPT/DECRYPT):
```java
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
```
CBC模式是一种常用的块密码模式,而PKCS5Padding是为了填充到块边界。
4. 设置初始化向量(IV),如果使用CBC模式,IV应该是随机生成的,并且在加密过程中必须保持不变:
```java
byte[] iv = ... // 生成一个固定大小的随机字节数组
cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(iv));
// 或者 Cipher.DECRYPT_MODE
```
5. 加密或解密数据:
```java
byte[] input = ... // 要加密的数据
byte[] encryptedData = cipher.doFinal(input);
```
如果需要将加密后的数据转换为字符串以便传输,可以使用Base64编码:
```java
String encodedData = Base64.getEncoder().encodeToString(encryptedData);
```
同样,解密时先解码再用相同的cipher实例:
```java
byte[] decodedData = Base64.getDecoder().decode(encodedData);
cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(iv));
byte[] decryptedData = cipher.doFinal(decodedData);
```
阅读全文