在Java中,可以使用Java Cryptography Architecture (JCA)来实现AES的五种加密模式。以下是一些示例代码:
- 电子密码本模式 (Electronic Codebook Mode, ECB)
import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; public class AESExample { public static void main(String[] args) throws Exception { String plaintext = "Hello, World!"; String key = "0123456789abcdef"; // 16字节的AES密钥 SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKey); byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes()); String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes); System.out.println("Encrypted Text: " + encryptedText); } }
- 密码分组链接模式 (Cipher Block Chaining Mode, CBC)
import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; public class AESExample { public static void main(String[] args) throws Exception { String plaintext = "Hello, World!"; String key = "0123456789abcdef"; // 16字节的AES密钥 String iv = "fedcba9876543210"; // 16字节的初始化向量 SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "AES"); IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes()); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec); byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes()); String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes); System.out.println("Encrypted Text: " + encryptedText); } }
- 密文反馈模式 (Cipher Feedback Mode, CFB)
import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; public class AESExample { public static void main(String[] args) throws Exception { String plaintext = "Hello, World!"; String key = "0123456789abcdef"; // 16字节的AES密钥 String iv = "fedcba9876543210"; // 16字节的初始化向量 SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "AES"); IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes()); Cipher cipher = Cipher.getInstance("AES/CFB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec); byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes()); String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes); System.out.println("Encrypted Text: " + encryptedText); } }
- 输出反馈模式 (Output Feedback Mode, OFB)
import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; public class AESExample { public static void main(String[] args) throws Exception { String plaintext = "Hello, World!"; String key = "0123456789abcdef"; // 16字节的AES密钥 String iv = "fedcba9876543210"; // 16字节的初始化向量 SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "AES"); IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes()); Cipher cipher = Cipher.getInstance("AES/OFB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec); byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes()); String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes); System.out.println("Encrypted Text: " + encryptedText); } }
- 计数器模式 (Counter Mode, CTR)
import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; public class AESExample { public static void main(String[] args) throws Exception { String plaintext = "Hello, World!"; String key = "0123456789abcdef"; // 16字节的AES密钥 String iv = "fedcba9876543210"; // 16字节的初始化向量 SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "