在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(), "