AES (Advanced Encryption Standard) 是一种广泛使用的对称加密算法。在Java中,你可以使用 javax.crypto
包来实现AES加密和解密。下面使用一个Java代码示例,展示了如何使用AES加密和解密字符串。
首先,请确保你的开发环境中已经包含了Java SE环境,并且你熟悉基本的Java编程概念。
步骤 1: 导入必要的包
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
步骤 2: 编写加密和解密的方法
public class AESExample {
private static final String ALGORITHM = "AES";
public static void main(String[] args) {
try {
// 生成密钥
SecretKey secretKey = generateKey();
// 原始文本
String plainText = "Hello, world!";
// 加密
byte[] encryptedBytes = encrypt(plainText.getBytes(), secretKey);
String encryptedString = Base64.getEncoder().encodeToString(encryptedBytes);
System.out.println("Encrypted: " + encryptedString);
// 解密
byte[] decryptedBytes = decrypt(encryptedBytes, secretKey);
String decryptedString = new String(decryptedBytes);
System.out.println("Decrypted: " + decryptedString);
} catch (Exception e) {
e.printStackTrace();
}
}
private static SecretKey generateKey() throws NoSuchAlgorithmException {
KeyGenerator keyGen = KeyGenerator.getInstance(ALGORITHM);
keyGen.init(128); // AES 使用 128 位密钥
return keyGen.generateKey();
}
private static byte[] encrypt(byte[] data, SecretKey secretKey) throws Exception {
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
return cipher.doFinal(data);
}
private static byte[] decrypt(byte[] encryptedData, SecretKey secretKey) throws Exception {
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKey);
return cipher.doFinal(encryptedData);
}
}
代码解释:
-
导入必要的包:
javax.crypto.Cipher
: 用于执行加密和解密操作。javax.crypto.KeyGenerator
: 用于生成加密密钥。javax.crypto.SecretKey
: 表示密钥对象。javax.crypto.spec.SecretKeySpec
: 用于创建密钥规范。java.security.NoSuchAlgorithmException
: 如果找不到指定的算法,则抛出此异常。java.util.Base64
: 用于编码和解码Base64格式的数据。
-
生成密钥:
- 使用
KeyGenerator
生成一个128位的AES密钥。
- 使用
-
加密方法:
- 初始化Cipher为加密模式,并使用密钥进行加密。
- 使用
doFinal
方法完成加密过程。
-
解密方法:
- 初始化Cipher为解密模式,并使用相同的密钥进行解密。
- 使用
doFinal
方法完成解密过程。
-
主方法:
- 生成密钥。
- 加密和解密测试字符串,并打印结果。
这个例子中,我们使用了Base64编码将加密后的字节数组转换为字符串形式,方便显示和传输。在实际应用中,你可能需要根据自己的需求调整代码,例如存储密钥、处理错误等。
请注意,在生产环境中,你需要妥善管理密钥,避免硬编码密钥到代码中,并考虑使用更安全的方式存储和管理密钥,例如使用密钥管理系统。