【Java实现AES加解密】
发布人:shili8
发布时间:2024-11-15 13:55
阅读次数:0
**Java 实现 AES 加解密**
AES(Advanced Encryption Standard)是一种常用的对称密钥块加密算法。它是由美国国家标准与技术研究所(NIST)在2001 年推出的,取代了 DES(Data Encryption Standard)。AES 是一种非常强大的加密算法,广泛应用于数据保护和安全领域。
在本文中,我们将使用 Java 来实现 AES 加解密。我们将使用 Java 的 `javax.crypto` 包来完成这一任务。
### **1. 导入必要的包**
首先,我们需要导入必要的包:
javaimport javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import java.security.Key; import java.util.Base64;
### **2.生成密钥**
AES 加解密需要一个密钥来进行加密和解密。我们可以使用 `javax.crypto.spec.SecretKeySpec` 类来生成一个 AES 密钥。
javapublic class AESUtil { public static Key generateKey(String key) throws Exception { //生成密钥 byte[] bytes = key.getBytes("UTF-8"); SecretKeySpec secretKeySpec = new SecretKeySpec(bytes, "AES"); return secretKeySpec; } }
### **3. 加密**
现在,我们可以使用 `javax.crypto.Cipher` 类来进行加密。
javapublic class AESUtil { public static String encrypt(String data, Key key) throws Exception { // 创建 Cipher 对象 Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, key); // 进行加密 byte[] bytes = cipher.doFinal(data.getBytes("UTF-8")); return Base64.getEncoder().encodeToString(bytes); } }
### **4. 解密**
最后,我们可以使用 `javax.crypto.Cipher` 类来进行解密。
javapublic class AESUtil { public static String decrypt(String data, Key key) throws Exception { // 创建 Cipher 对象 Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.DECRYPT_MODE, key); // 进行解密 byte[] bytes = Base64.getDecoder().decode(data); return new String(cipher.doFinal(bytes), "UTF-8"); } }
### **5. 测试**
现在,我们可以测试一下我们的 AES 加解密功能。
javapublic class Main { public static void main(String[] args) throws Exception { //生成密钥 Key key = AESUtil.generateKey("mysecretkey"); // 加密 String encryptedData = AESUtil.encrypt("Hello, World!", key); System.out.println("加密后数据:" + encryptedData); // 解密 String decryptedData = AESUtil.decrypt(encryptedData, key); System.out.println("解密后数据:" + decryptedData); } }
### **6. 结论**
在本文中,我们使用 Java 实现了 AES 加解密功能。我们使用 `javax.crypto` 包来完成这一任务。我们生成了一个 AES 密钥,进行加密和解密,并测试了我们的功能。
AES 是一种非常强大的加密算法,广泛应用于数据保护和安全领域。在实际项目中,我们可以使用这种加密算法来保护敏感数据。
### **7. 附录**
#### **7.1 AES 加解密示例代码**
javapublic class AESUtil { public static Key generateKey(String key) throws Exception { //生成密钥 byte[] bytes = key.getBytes("UTF-8"); SecretKeySpec secretKeySpec = new SecretKeySpec(bytes, "AES"); return secretKeySpec; } public static String encrypt(String data, Key key) throws Exception { // 创建 Cipher 对象 Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, key); // 进行加密 byte[] bytes = cipher.doFinal(data.getBytes("UTF-8")); return Base64.getEncoder().encodeToString(bytes); } public static String decrypt(String data, Key key) throws Exception { // 创建 Cipher 对象 Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.DECRYPT_MODE, key); // 进行解密 byte[] bytes = Base64.getDecoder().decode(data); return new String(cipher.doFinal(bytes), "UTF-8"); } }
#### **7.2 测试示例代码**
javapublic class Main { public static void main(String[] args) throws Exception { //生成密钥 Key key = AESUtil.generateKey("mysecretkey"); // 加密 String encryptedData = AESUtil.encrypt("Hello, World!", key); System.out.println("加密后数据:" + encryptedData); // 解密 String decryptedData = AESUtil.decrypt(encryptedData, key); System.out.println("解密后数据:" + decryptedData); } }
#### **7.3 AES 加解密注意事项**
* AES 加解密需要一个密钥来进行加密和解密。
* 密钥长度应为128、192 或256 位。
* 使用 AES 加解密时,应使用 `javax.crypto` 包中的 `Cipher` 类。
* 在实际项目中,应使用安全的随机数生成器(RNG)来生成密钥。
以上是Java实现AES加解密的详细教程。