java AES加密算法
时间: 2023-10-14 21:24:42 浏览: 50
Java中可以通过javax.crypto包实现AES加密算法,具体实现步骤如下:
1. 获取Cipher对象
```java
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
```
其中,AES表示使用AES算法,CBC表示使用CBC模式,PKCS5Padding表示使用PKCS#5填充方式。
2. 初始化Cipher对象
```java
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
```
其中,keyBytes表示AES加密密钥的字节数组,ivBytes表示初始化向量的字节数组,ENCRYPT_MODE表示加密模式。
3. 执行加密操作
```java
byte[] encryptedBytes = cipher.doFinal(plainText.getBytes("UTF-8"));
```
其中,plainText表示需要加密的明文字符串。
完整的加密代码如下:
```java
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AesUtil {
public static String encrypt(String plainText, String key, String iv) throws Exception {
byte[] keyBytes = key.getBytes("UTF-8");
byte[] ivBytes = iv.getBytes("UTF-8");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
byte[] encryptedBytes = cipher.doFinal(plainText.getBytes("UTF-8"));
return Base64.getEncoder().encodeToString(encryptedBytes);
}
public static void main(String[] args) throws Exception {
String plainText = "Hello, world!";
String key = "1234567890123456";
String iv = "1234567890123456";
String encryptedText = encrypt(plainText, key, iv);
System.out.println("encryptedText: " + encryptedText);
}
}
```
其中,key和iv都是16字节(128位)的字符串。由于AES算法的安全性非常高,因此在使用时需要注意密钥和向量的安全性。