如何在java中实现aes加密解密功能?1. 准备工作:引入javax.crypto包和secretkeyspec类,使用jdk自带类库即可,建议java 8及以上环境;2. 生成密钥:通过securerandom生成128位随机密钥,或使用固定字符串测试;3. 加密过程:采用aes/cbc/pkcs5padding模式,生成随机iv并拼接base64编码的iv与密文;4. 解密过程:拆分iv和密文部分,使用相同密钥和iv进行解密;5. 完整示例:调用encrypt和decrypt方法完成加密解密流程;6. 注意事项:避免硬编码密钥,使用密钥管理系统,每次生成新iv,推荐cbc模式,避免ecb,考虑结合hmac或gcm增强安全性。

实现加密解密功能在Java中是一个常见的需求,尤其在处理敏感数据时。AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,具有较高的安全性和效率。下面将介绍如何使用Java实现完整的AES加密和解密过程。

在Java中,AES加密主要依赖于javax.crypto包,以及SecretKeySpec类来生成密钥。标准的JDK通常已经包含这些类,不需要额外引入第三方库。不过,如果你需要更灵活的功能(比如PKCS7填充),可以考虑使用Bouncy Castle等扩展库。

确保你的Java环境版本至少是 Java 8 或更高,并且没有限制策略文件(默认情况下是允许的)。
立即学习“Java免费学习笔记(深入)”;
AES要求一个密钥(Key),通常是128位、192位或256位长度。这里我们以128位为例:

import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
public class AESExample {
private static final String ALGORITHM = "AES";
public static byte[] generateKey() {
byte[] key = new byte[16]; // 128 bits
new SecureRandom().nextBytes(key);
return key;
}
public static SecretKeySpec createKey(byte[] key) {
return new SecretKeySpec(key, ALGORITHM);
}
}注意:为了方便测试,你也可以使用固定的字符串作为密钥,例如 "1234567890abcdef",但生产环境中建议使用随机生成的密钥。
AES支持多种工作模式,推荐使用CBC(Cipher Block Chaining)加上IV(初始化向量)以增强安全性。
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import java.util.Base64;
public class AESExample {
// ... 前面的generateKey和createKey方法省略 ...
public static String encrypt(byte[] key, String data) throws Exception {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
byte[] iv = new byte[16]; // 初始化向量
new SecureRandom().nextBytes(iv);
IvParameterSpec ivSpec = new IvParameterSpec(iv);
cipher.init(Cipher.ENCRYPT_MODE, createKey(key), ivSpec);
byte[] encrypted = cipher.doFinal(data.getBytes());
// 返回 Base64 编码结果 + IV(便于后续解密)
return Base64.getEncoder().encodeToString(iv) + ":" + Base64.getEncoder().encodeToString(encrypted);
}
}AES/CBC/PKCS5Padding 模式。iv:encrypted_data,用冒号分隔。解密时,需要先提取出IV部分,然后使用相同的密钥进行解密。
public static String decrypt(byte[] key, String encryptedData) throws Exception {
String[] parts = encryptedData.split(":");
byte[] iv = Base64.getDecoder().decode(parts[0]);
byte[] cipherText = Base64.getDecoder().decode(parts[1]);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec ivSpec = new IvParameterSpec(iv);
cipher.init(Cipher.DECRYPT_MODE, createKey(key), ivSpec);
byte[] decrypted = cipher.doFinal(cipherText);
return new String(decrypted);
}你可以这样使用上面的方法:
public static void main(String[] args) throws Exception {
byte[] key = generateKey();
String original = "Hello, this is a secret message!";
String encrypted = encrypt(key, original);
System.out.println("Encrypted: " + encrypted);
String decrypted = decrypt(key, encrypted);
System.out.println("Decrypted: " + decrypted);
}输出大致如下:
Encrypted: 3q2+7wIDAQIDBAUGBwgJCgsMDQ4PECESFBUWFxgZGhscHB4fIBE= Decrypted: Hello, this is a secret message!
基本上就这些了。AES加密在Java中实现并不复杂,但细节上容易忽略,特别是密钥管理和模式选择。只要注意这些点,就能写出安全可靠的加密代码。
以上就是怎样用Java实现加密解密?AES算法完整实现的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号