引言
在信息时代,数据安全至关重要。加密技术是保障数据安全的有效手段之一。AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,以其高效性和安全性而闻名。本文将带你轻松掌握Java中的AES加密,包括加密解密实战指南。
AES加密简介
1. AES算法特点
- 对称加密:加密和解密使用相同的密钥。
- 快速高效:算法执行速度快,适合实时加密。
- 安全性高:经过长时间的安全测试,被认为是安全的加密算法。
2. AES加密模式
- ECB(Electronic Codebook):电子码本模式,简单但安全性较低。
- CBC(Cipher Block Chaining):密码块链接模式,安全性较高,常用于实际应用。
- CFB(Cipher Feedback):密码反馈模式,适合流加密。
- OFB(Output Feedback):输出反馈模式,同样适合流加密。
Java AES加密实现
1. 导入依赖
在Java项目中,首先需要导入AES加密所需的库。以下是一个使用Bouncy Castle库的示例:
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import java.security.Security;
Security.addProvider(new BouncyCastleProvider());
2. 生成密钥
使用AES算法生成密钥,密钥长度为128位、192位或256位。
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128); // 初始化密钥长度
SecretKey secretKey = keyGenerator.generateKey();
3. 加密和解密
加密
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, generateIv());
byte[] encrypted = cipher.doFinal("Hello, AES!".getBytes());
解密
byte[] decrypted = cipher.doFinal(encrypted);
System.out.println(new String(decrypted));
4. 生成初始化向量(IV)
import javax.crypto.spec.IvParameterSpec;
public static IvParameterSpec generateIv() {
byte[] iv = new byte[16];
new SecureRandom().nextBytes(iv);
return new IvParameterSpec(iv);
}
实战案例
下面是一个简单的AES加密解密实战案例:
public class AesExample {
public static void main(String[] args) throws Exception {
// 生成密钥
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
SecretKey secretKey = keyGenerator.generateKey();
// 加密
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, generateIv());
byte[] encrypted = cipher.doFinal("Hello, AES!".getBytes());
// 解密
cipher.init(Cipher.DECRYPT_MODE, secretKey, generateIv());
byte[] decrypted = cipher.doFinal(encrypted);
System.out.println("Original: Hello, AES!");
System.out.println("Encrypted: " + new String(encrypted));
System.out.println("Decrypted: " + new String(decrypted));
}
public static IvParameterSpec generateIv() {
byte[] iv = new byte[16];
new SecureRandom().nextBytes(iv);
return new IvParameterSpec(iv);
}
}
运行上述代码,可以看到加密和解密后的结果。
总结
本文介绍了Java AES加密的基本概念、实现方法以及实战案例。通过学习本文,你可以轻松掌握Java AES加密,为数据安全保驾护航。
