在 Java 中进行 AES 加解密有几种实现方式,我会为您介绍其中的三种常见方式:使用 Java 标准库、使用 Bouncy Castle 库、以及使用 Java 加密扩展(JCE)库。对于每种方式,我将提供详细的步骤流程和示例代码。
Java 标准库提供了对 AES 加解密的支持,无需额外导入库。
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class AESExample {
public static void main(String[] args) throws Exception {
// 1. 生成AES密钥
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128); // 可选:128、192或256位
SecretKey secretKey = keyGenerator.generateKey();
// 2. 创建Cipher对象
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); // ECB模式,使用PKCS5Padding填充
// 3. 初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
// 待加密的数据
String plainText = "Hello, AES!";
byte[] plaintextBytes = plainText.getBytes(StandardCharsets.UTF_8);
// 4. 加密数据
byte[] encryptedBytes = cipher.doFinal(plaintextBytes);
System.out.println("Encrypted: " + Base64.getEncoder().encodeToString(encryptedBytes));
}
}
Bouncy Castle 是一个流行的密码学库,支持各种加密算法,包括 AES。
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.68</version> <!-- 最新版本请查阅Maven仓库 -->
</dependency>
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.security.Security;
import java.util.Base64;
public class BouncyCastleAESExample {
public static void main(String[] args) throws Exception {
Security.addProvider(new BouncyCastleProvider());
// 1. 生成AES密钥
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES", "BC");
keyGenerator.init(128); // 可选:128、192或256位
SecretKey secretKey = keyGenerator.generateKey();
// 2. 创建Cipher对象
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC"); // ECB模式,使用PKCS7Padding填充
// 3. 初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
// 待加密的数据
String plainText = "Hello, AES with Bouncy Castle!";
byte[] plaintextBytes = plainText.getBytes(StandardCharsets.UTF_8);
// 4. 加密数据
byte[] encryptedBytes = cipher.doFinal(plaintextBytes);
System.out.println("Encrypted: " + Base64.getEncoder().encodeToString(encryptedBytes));
}
}
JCE 库是 Java 的加密扩展,提供了丰富的加密算法支持。
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.security.Provider;
import java.security.Security;
public class JCEAESExample {
public static void main(String[] args) throws Exception {
// 1. 生成AES密钥
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128); // 可选:128、192或256位
SecretKey secretKey = keyGenerator.generateKey();
// 2. 创建Cipher对象
Provider provider = Security.getProvider("SunJCE");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding", provider); // ECB模式,使用PKCS5Padding填充
// 3. 初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
// 待加密的数据
String plainText = "Hello, AES with JCE!";
byte[] plaintextBytes = plainText.getBytes(StandardCharsets.UTF_8);
// 4. 加密数据
byte[] encryptedBytes = cipher.doFinal(plaintextBytes);
System.out.println("Encrypted: " + Base64.getEncoder().encodeToString(encryptedBytes));
}
}
请注意,这些示例中的代码仅仅是为了演示目的,实际应用中需要注意更多细节,如密钥管理、安全性等。另外,随着时间的推移,库的版本可能会有所变化,您应该查阅最新的文档来确保正确的使用方式。