实现 AES 可逆加密的 Java 教程
在现代应用程序中,加密数据是保护用户隐私和安全的重要措施。AES(高级加密标准)是一种常见的对称加密算法,其中加密和解密使用相同的密钥。本文将帮助你理解如何在 Java 中实现 AES 的可逆加密,并逐步引导你完成代码实现。
加密与解密流程
在开始编码之前,我们要了解整个加密和解密的流程。以下是 AES 加密和解密的基本步骤:
步骤 | 描述 |
---|---|
1. 选择密钥 | 选择一个合适长度的密钥 (128/192/256 位) |
2. 初始化算法 | 使用 Cipher 类初始化 AES 加密算法 |
3. 加密数据 | 将明文数据作为输入,使用密钥进行加密 |
4. 解密数据 | 将密文数据作为输入,使用相同的密钥进行解密 |
5. 处理结果 | 输出结果:加密后的字符串和解密后的明文 |
类图
我们将根据上面的步骤创建一个简单的 AESCrypt
类,该类将包含加密和解密的方法。
classDiagram
class AESCrypt {
+String encrypt(String data, String key)
+String decrypt(String encryptedData, String key)
}
实现代码
接下来,我们可以实现 AESCrypt 类。以下是实现 AES 加密和解密的代码。
import javax.crypto.Cipher; // 用于加密算法
import javax.crypto.KeyGenerator; // 用于生成密钥
import javax.crypto.SecretKey; // 用于表示密钥
import javax.crypto.spec.SecretKeySpec; // 用于指定密钥的特征
import java.util.Base64; // 用于Base64编码和解码
public class AESCrypt {
// AES加密方法
public String encrypt(String data, String key) throws Exception {
// 使用指定的密钥生成AES密钥
SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "AES");
// 创建Cipher对象并初始化为加密模式
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
// 加密数据并返回Base64编码的结果
byte[] encryptedData = cipher.doFinal(data.getBytes());
return Base64.getEncoder().encodeToString(encryptedData);
}
// AES解密方法
public String decrypt(String encryptedData, String key) throws Exception {
// 使用指定的密钥生成AES密钥
SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "AES");
// 创建Cipher对象并初始化为解密模式
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
// 解密数据并返回字符串结果
byte[] decodedData = Base64.getDecoder().decode(encryptedData);
byte[] originalData = cipher.doFinal(decodedData);
return new String(originalData);
}
}
代码解释
import
语句:引入所需的加密类。AESCrypt
类:主类,包含加密和解密方法。encrypt
方法:- 使用给定的密钥创建AES密钥。
- 创建Cipher对象,并将其初始化为加密模式。
- 对输入数据进行加密,结果用Base64编码。
decrypt
方法:- 类似地使用密钥进行解密,将解密后的字节转换为字符串。
使用示例
以下是如何使用 AESCrypt
类进行加密和解密的示例代码。
public class Main {
public static void main(String[] args) {
try {
// 输入需要加密的文本和密钥
String originalText = "Hello, World!";
String key = "1234567890123456"; // 16 字符的密钥
// 创建 AESCrypt 实例
AESCrypt aesCrypt = new AESCrypt();
// 执行加密
String encryptedText = aesCrypt.encrypt(originalText, key);
System.out.println("Encrypted: " + encryptedText);
// 执行解密
String decryptedText = aesCrypt.decrypt(encryptedText, key);
System.out.println("Decrypted: " + decryptedText);
} catch (Exception e) {
e.printStackTrace();
}
}
}
示例代码解释
- 定义原始文本和密钥。确保密钥长度为16个字符(即128位)。
- 创建
AESCrypt
类的实例。 - 调用
encrypt
方法对原始文本进行加密,并输出结果。 - 调用
decrypt
方法对加密后的文本进行解密,并输出解密结果。
序列图
以下是加密和解密过程的序列图。
sequenceDiagram
participant User as 用户
participant AESCrypt as AESCrypt
User->>AESCrypt: encrypt(data, key)
AESCrypt->>User: encryptedData
User->>AESCrypt: decrypt(encryptedData, key)
AESCrypt->>User: originalData
结尾
在本文中,我们学习了如何在 Java 中实现 AES 可逆加密,包括加密和解密的完整过程和相关代码。确保你在使用时密钥的安全性,以防止数据泄露。通过本教程,你应该能够实现 AES 加密的基础功能,并在实际项目中为敏感数据提供保护。这只是加密领域的第一步,更多的安全措施和技术等待你去探索!