《Java AES加密实战:从入门到精通》

一、AES加密简介
AES(Advanced Encryption Standard)即高级加密标准,是一种广泛使用的对称加密算法。它由比利时密码学家Vincent Rijmen和Joan Daemen共同设计,并于2001年被美国国家标准与技术研究院(NIST)采纳为官方加密标准。AES加密算法具有以下特点:
1. 对称加密:加密和解密使用相同的密钥;
2. 高度安全:经过多年研究,AES加密算法的安全性得到广泛认可;
3. 速度快:相比其他加密算法,AES加密和解密速度更快;
4. 支持多种模式:AES支持多种加密模式,如ECB、CBC、CFB、OFB等。
二、Java AES加密实现
在Java中,我们可以使用Java Cryptography Extension(JCE)来实现AES加密。以下将详细介绍如何在Java中使用AES加密算法。
1. 生成AES密钥
在Java中,我们可以使用KeyGenerator类来生成AES密钥。以下代码演示了如何生成AES密钥:
```java
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
public class AesKeyGenerator {
public static void main(String[] args) throws Exception {
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128); // 初始化密钥长度为128位
SecretKey secretKey = keyGenerator.generateKey(); // 生成AES密钥
byte[] keyBytes = secretKey.getEncoded(); // 获取密钥的字节数组
System.out.println("AES密钥(16进制):" + bytesToHex(keyBytes));
}
// 将字节数组转换为16进制字符串
private static String bytesToHex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02x", b));
}
return sb.toString();
}
}
```
2. AES加密和解密
生成密钥后,我们可以使用Cipher类来实现AES加密和解密。以下代码演示了如何使用AES加密和解密:
```java
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AesEncryption {
public static void main(String[] args) throws Exception {
// 生成AES密钥
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128); // 初始化密钥长度为128位
SecretKey secretKey = keyGenerator.generateKey(); // 生成AES密钥
byte[] keyBytes = secretKey.getEncoded(); // 获取密钥的字节数组
// 加密
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); // 选择AES加密算法和填充方式
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(keyBytes, "AES")); // 初始化加密器
byte[] cipherText = cipher.doFinal("Hello AES!".getBytes()); // 加密
System.out.println("加密结果(Base64):" + Base64.getEncoder().encodeToString(cipherText));
// 解密
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keyBytes, "AES")); // 初始化解密器
byte[] plainText = cipher.doFinal(cipherText); // 解密
System.out.println("解密结果:" + new String(plainText));
}
}
```
3. AES加密模式
AES支持多种加密模式,如ECB、CBC、CFB、OFB等。以下代码演示了如何使用AES的CBC加密模式:
```java
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 AesCbcEncryption {
public static void main(String[] args) throws Exception {
// 生成AES密钥和初始化向量
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128); // 初始化密钥长度为128位
SecretKey secretKey = keyGenerator.generateKey(); // 生成AES密钥
byte[] keyBytes = secretKey.getEncoded(); // 获取密钥的字节数组
byte[] ivBytes = new byte[16]; // 初始化向量长度为16字节
new SecureRandom().nextBytes(ivBytes); // 随机生成初始化向量
// 加密
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); // 选择AES加密算法和填充方式
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(keyBytes, "AES"), new IvParameterSpec(ivBytes)); // 初始化加密器
byte[] cipherText = cipher.doFinal("Hello AES!".getBytes()); // 加密
System.out.println("加密结果(Base64):" + Base64.getEncoder().encodeToString(cipherText));
// 解密
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keyBytes, "AES"), new IvParameterSpec(ivBytes)); // 初始化解密器
byte[] plainText = cipher.doFinal(cipherText); // 解密
System.out.println("解密结果:" + new String(plainText));
}
}
```
三、总结
本文介绍了Java AES加密算法的使用方法,包括生成AES密钥、AES加密和解密、AES加密模式等。在实际开发中,我们可以根据需求选择合适的加密模式和填充方式,确保数据的安全性。通过本文的学习,相信大家对Java AES加密有了更深入的了解。





