Java AES加密代码实现
作为一名经验丰富的开发者,我将指导你如何使用Java实现AES加密算法。下面是整个过程的流程图:
flowchart TD
A[开始] --> B[生成密钥]
B --> C[设置加密模式和填充方式]
C --> D[初始化加密器]
D --> E[加密数据]
E --> F[输出加密结果]
F --> G[解密数据]
G --> H[输出解密结果]
H --> I[结束]
接下来,我将逐步介绍每个步骤所需的代码和注释。
生成密钥
在AES加密中,需要生成一个密钥用于加密和解密。下面是生成密钥的代码:
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
SecretKey secretKey = keyGenerator.generateKey();
这段代码使用KeyGenerator
类生成AES算法的密钥,密钥的长度为128位。
设置加密模式和填充方式
在AES加密中,需要设置加密模式和填充方式。这里我们选择使用ECB模式和PKCS5Padding填充方式。以下是设置加密模式和填充方式的代码:
import javax.crypto.Cipher;
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
这段代码使用Cipher
类设置加密模式为AES,填充方式为PKCS5Padding,并选择ECB模式。
初始化加密器
在AES加密中,需要初始化加密器,指定加密或解密模式以及密钥。以下是初始化加密器的代码:
import javax.crypto.spec.SecretKeySpec;
byte[] keyBytes = secretKey.getEncoded();
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
这段代码先将密钥转换为字节数组,然后使用SecretKeySpec
类将字节数组转换为密钥规范。最后,使用cipher.init()
方法初始化加密器,指定加密模式为ENCRYPT_MODE,密钥为密钥规范。
加密数据
在AES加密中,需要将待加密的数据转换为字节数组,并将其加密。以下是加密数据的代码:
byte[] inputData = "Hello, World!".getBytes();
byte[] encryptedData = cipher.doFinal(inputData);
这段代码将待加密的数据转换为字节数组,并使用cipher.doFinal()
方法加密数据。
输出加密结果
在AES加密中,加密后的数据需要以某种格式输出。以下是输出加密结果的代码:
String encryptedText = new String(encryptedData);
System.out.println("加密结果:" + encryptedText);
这段代码将加密后的数据转换为字符串,并输出加密结果。
解密数据
在AES加密中,需要将加密后的数据解密。以下是解密数据的代码:
cipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] decryptedData = cipher.doFinal(encryptedData);
这段代码使用cipher.init()
方法重新初始化加密器,指定解密模式为DECRYPT_MODE,密钥为密钥规范。然后,使用cipher.doFinal()
方法解密数据。
输出解密结果
在AES加密中,解密后的数据需要以某种格式输出。以下是输出解密结果的代码:
String decryptedText = new String(decryptedData);
System.out.println("解密结果:" + decryptedText);
这段代码将解密后的数据转换为字符串,并输出解密结果。
整个过程的代码示例如下:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class AESEncryptionExample {
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/ECB/PKCS5Padding");
// 初始化加密器
byte[] keyBytes = secretKey.getEncoded();
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
cipher.init(Cipher.ENCRYPT_MODE,