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,