概述
AES(Advanced Encryption Standard)是一种对称加密算法,广泛应用于数据加密和保护敏感信息。AES以其安全性和高效性成为现代加密标准的主流选择。
AES算法概述
-
基本原理:
- AES使用对称密钥加密,即加密和解密使用相同的密钥。
- 它处理固定大小的块(128位),并支持多种密钥长度:128位、192位和256位。
- 加密过程包括多个轮次的字节替换、行移位、列混淆和轮密钥加等操作。
-
加密过程:
- 将明文分成128位块,并用密钥进行多轮变换,生成密文。
-
解密过程:
- 将密文分成128位块,使用相同的密钥反向进行多轮变换,恢复明文。
应用场景
- 数据保护:保护存储在数据库中的敏感信息,如密码、信用卡信息等。
- 通信安全:在网络传输中加密敏感数据,如SSL/TLS协议中的数据加密。
- 文件加密:对文件进行加密,以保护文件的机密性。
Java中的AES示例代码
以下是一个使用Java实现AES加密和解密的示例,演示如何加密和解密字符串。
示例代码
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.spec.IvParameterSpec;
import java.util.Base64;
public class AesExample {
private static final String ALGORITHM = "AES";
private static final String TRANSFORMATION = "AES/CBC/PKCS5Padding";
public static void main(String[] args) {
try {
// 生成密钥
KeyGenerator keyGen = KeyGenerator.getInstance(ALGORITHM);
keyGen.init(128); // 可以选择128、192或256位
SecretKey secretKey = keyGen.generateKey();
byte[] key = secretKey.getEncoded();
// 原始数据
String originalData = "Hello, AES!";
// 加密
String encryptedData = encrypt(originalData, key);
System.out.println("加密后的数据: " + encryptedData);
// 解密
String decryptedData = decrypt(encryptedData, key);
System.out.println("解密后的数据: " + decryptedData);
} catch (Exception e) {
e.printStackTrace();
}
}
public static String encrypt(String data, byte[] key) throws Exception {
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
SecretKeySpec secretKeySpec = new SecretKeySpec(key, ALGORITHM);
// 初始化向量
byte[] iv = new byte[16]; // AES块大小
IvParameterSpec ivParams = new IvParameterSpec(iv);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParams);
byte[] encryptedBytes = cipher.doFinal(data.getBytes());
return Base64.getEncoder().encodeToString(encryptedBytes);
}
public static String decrypt(String encryptedData, byte[] key) throws Exception {
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
SecretKeySpec secretKeySpec = new SecretKeySpec(key, ALGORITHM);
// 初始化向量
byte[] iv = new byte[16]; // AES块大小
IvParameterSpec ivParams = new IvParameterSpec(iv);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParams);
byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
return new String(decryptedBytes);
}
}
代码说明
-
密钥生成:
- 使用
KeyGenerator
生成AES密钥,指定密钥长度(128、192或256位)。
- 使用
-
加密过程:
- 使用
Cipher
类进行加密,初始化为加密模式,使用生成的密钥和初始化向量(IV)。
- 使用
-
解密过程:
- 重新初始化
Cipher
为解密模式,使用相同的密钥和IV对密文进行解密。
- 重新初始化
-
Base64编码:
- 将加密后的字节数组转换为Base64字符串,以便于展示和存储。
总结
AES是一种高效且安全的对称加密算法,广泛应用于数据保护、通信安全和文件加密等场景。