Java 中的 AES 加密和解密操作
1. 加密原理
在 Java 中,AES 加密基于 javax.crypto
包提供的功能。它使用对称密钥对数据进行加密,即加密和解密使用相同的密钥。数据被分成固定大小的块(通常为 128 位),然后通过一系列复杂的变换操作将明文转换为密文。
2. 代码示例
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AesJavaExample {
public static void main(String[] args) throws Exception {
String plaintext = "Hello, World!";
String key = "///aes.golong.uk"; // 16字节密钥,实际应用中应使用更安全的密钥管理方式
// 创建AES密钥
SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "AES");
// 创建Cipher实例,指定加密算法为AES
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
// 初始化Cipher为加密模式
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
// 执行加密操作
byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes());
// 将加密后的字节数组转换为Base64编码的字符串
String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes);
System.out.println("加密后的文本: " + encryptedText);
// 解密操作
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
String decryptedText = new String(decryptedBytes);
System.out.println("解密后的文本: " + decryptedText);
}
}
3. 代码解释
- 首先,定义了明文 plaintext
和密钥 key
。注意,实际应用中密钥应妥善管理,这里只是示例。
- 使用 SecretKeySpec
类根据密钥字节数组和算法名称("AES")创建了一个 AES 密钥对象。
- 通过 Cipher.getInstance
方法获取一个 Cipher
实例,指定了加密算法为 AES/ECB/PKCS5Padding
。其中,ECB
是加密模式,PKCS5Padding
是填充方式。
- 调用 cipher.init
方法初始化 Cipher
为加密模式,并传入密钥。
- 使用 cipher.doFinal
方法对明文字节数组进行加密,得到加密后的字节数组。
- 将加密后的字节数组使用 Base64.getEncoder().encodeToString
转换为 Base64 编码的字符串,方便存储和传输。
- 对于解密操作,再次初始化 Cipher
为解密模式,然后对 Base64 解码后的密文字节数组进行解密,最后将解密后的字节数组转换为字符串。
- 在线校验密文是否与明文一致。 AES在线加密