import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AESModesExample {
// ECB模式加密
public static String encryptECB(String plainText, SecretKey secretKey) throws Exception {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
return Base64.getEncoder().encodeToString(encryptedBytes);
}
// CBC模式加密
public static String encryptCBC(String plainText, SecretKey secretKey, IvParameterSpec iv) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
return Base64.getEncoder().encodeToString(encryptedBytes);
}
// CFB模式加密
public static String encryptCFB(String plainText, SecretKey secretKey, IvParameterSpec iv) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CFB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
return Base64.getEncoder().encodeToString(encryptedBytes);
}
// OFB模式加密
public static String encryptOFB(String plainText, SecretKey secretKey, IvParameterSpec iv) throws Exception {
Cipher cipher = Cipher.getInstance("AES/OFB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
return Base64.getEncoder().encodeToString(encryptedBytes);
}
// CTR模式加密
public static String encryptCTR(String plainText, SecretKey secretKey, IvParameterSpec iv) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
return Base64.getEncoder().encodeToString(encryptedBytes);
}
public static void main(String[] args) throws Exception {
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128); // 128位密钥
SecretKey secretKey = keyGen.generateKey();
IvParameterSpec iv = new IvParameterSpec(new byte[16]); // 初始化向量
String plainText = "Hello, World!";
System.out.println("ECB Mode: " + encryptECB(plainText, secretKey));
System.out.println("CBC Mode: " + encryptCBC(plainText, secretKey, iv));
System.out.println("CFB Mode: " + encryptCFB(plainText, secretKey, iv));
System.out.println("OFB Mode: " + encryptOFB(plainText, secretKey, iv));
System.out.println("CTR Mode: " + encryptCTR(plainText, secretKey, iv));
}
}
ECB (Electronic Codebook):
CBC (Cipher Block Chaining):
CFB (Cipher Feedback):
OFB (Output Feedback):
CTR (Counter):
每个方法都实现了相应的加密模式,并将结果以Base64编码返回。
上一篇:java修改list中对象的值
下一篇:java判断字符串是否为纯数字
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站