Java AES加密工具类实现教程
1. 整体流程概述
为了实现Java AES加密工具类,我们需要按照以下步骤进行操作:
步骤 | 描述 |
---|---|
1 | 生成AES密钥 |
2 | 将明文转换为字节数组 |
3 | 使用AES算法和密钥进行加密 |
4 | 将密文转换为Base64编码的字符串 |
5 | 使用AES算法和密钥进行解密 |
6 | 将解密后的字节数组转换为明文 |
接下来,我们将逐步解释每个步骤的具体实现和需要使用的代码。
2. 生成AES密钥
在Java中,我们可以使用javax.crypto包下的KeyGenerator
类来生成AES密钥。具体代码如下所示:
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.NoSuchAlgorithmException;
public class AESUtils {
public static SecretKey generateAESKey() throws NoSuchAlgorithmException {
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128); // 指定密钥长度为128位
return keyGen.generateKey();
}
}
上述代码中,我们先获取一个KeyGenerator
实例,并指定算法为"AES"。然后,我们使用init
方法指定密钥长度为128位。最后,通过调用generateKey
方法生成具体的AES密钥。
3. 将明文转换为字节数组
在进行AES加密之前,我们需要将明文转换为字节数组。这可以通过使用getBytes
方法实现。具体代码如下所示:
public class AESUtils {
// ...
public static byte[] convertToBytes(String plainText) {
return plainText.getBytes();
}
// ...
}
上述代码中,我们定义了一个convertToBytes
方法,该方法接收一个参数plainText
,表示需要转换的明文。通过调用getBytes
方法,我们可以将明文转换为字节数组。
4. 使用AES算法和密钥进行加密
在Java中,我们可以使用javax.crypto包下的Cipher
类来进行AES加密。具体代码如下所示:
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
public class AESUtils {
// ...
public static byte[] encrypt(byte[] plainBytes, SecretKey secretKey) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
return cipher.doFinal(plainBytes);
}
// ...
}
上述代码中,我们先获取一个Cipher
实例,并指定算法为"AES"。然后,我们使用init
方法初始化Cipher
实例,其中第一个参数为加密模式(Cipher.ENCRYPT_MODE
),第二个参数为密钥。最后,通过调用doFinal
方法对明文字节数组进行加密。
5. 将密文转换为Base64编码的字符串
为了方便传输和存储,我们可以将加密后的密文转换为Base64编码的字符串。在Java中,我们可以使用java.util.Base64类来实现这一功能。具体代码如下所示:
import java.util.Base64;
public class AESUtils {
// ...
public static String convertToBase64(byte[] encryptedBytes) {
return Base64.getEncoder().encodeToString(encryptedBytes);
}
// ...
}
上述代码中,我们定义了一个convertToBase64
方法,该方法接收一个参数encryptedBytes
,表示需要转换的密文字节数组。通过调用Base64.getEncoder().encodeToString
方法,我们可以将密文字节数组转换为Base64编码的字符串。
6. 使用AES算法和密钥进行解密
在Java中,我们可以使用javax.crypto包下的Cipher
类来进行AES解密。具体代码如下所示:
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
public class AESUtils {
// ...
public static byte[] decrypt(byte[] encryptedBytes, SecretKey secretKey) throws Exception {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
return cipher.doFinal(encryptedBytes);
}
// ...
}
上述代码中,我们先获取一个Cipher
实例,并指定算法为"AES"。然后,我们使用