JAVA AES加解密
时间: 2024-09-25 10:01:04 浏览: 39
在Java中,AES(Advanced Encryption Standard)加密和解密可以通过Bouncy Castle库来实现,这是一个广泛使用的开源加密库。以下是使用AES进行加解密的基本流程:
1. **初始化AES密钥**:
使用`Cipher.getInstance("AES")`获取AES实例,然后创建一个随机的初始向量(IV),用于每一轮加密。
2. **加密**:
- 设置模式(如CBC,CTR等),并选择填充方式(如PKCS#7)。
- 使用`Cipher.init(Cipher.ENCRYPT_MODE, key, iv)`设置加密模式。
- 对输入的字节数组进行加密,`byte[] encryptedData = cipher.doFinal(input)`。
3. **编码成Base64**:
加密后的字节流通常会转换为Base64字符串以方便存储和传输,`String base64Encrypted = Base64.getEncoder().encodeToString(encryptedData)`。
4. **解密**:
- 初始化`Cipher`实例,但这次使用`Cipher.DECRYPT_MODE`。
- 解密Base64字符串回字节数组,`byte[] decryptedData = Base64.getDecoder().decode(base64Encrypted)`。
- 再次调用`doFinal()`进行实际解密。
下面是一个简单的示例代码片段:
```java
// 假设key和iv已准备就绪
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(iv);
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);
byte[] encryptedData = cipher.doFinal(input);
String base64Encrypted = Base64.getEncoder().encodeToString(encryptedData);
// ... 后续保存到数据库或传输 ...
// 解密
cipher.init(Cipher.DECRYPT_MODE, secretKey, ivSpec);
byte[] decryptedData = cipher.doFinal(Base64.getDecoder().decode(base64Encrypted));
// ... 解密后处理 ...
} catch (Exception e) {
e.printStackTrace();
}
```
请注意,为了保持安全性,IV应当在每次加密请求时都是新的,并且不应与密钥共享。
阅读全文