Java AES加解密工具类科普

随着信息技术的快速发展,数据安全变得越来越重要。AES(高级加密标准)作为一种广泛使用的对称加密算法,因其高效性和安全性而受到青睐。在Java中,我们可以通过使用Java Cryptography Architecture(JCA)提供的加密工具来实现AES加解密。本文将介绍如何使用Java实现AES加解密,并提供代码示例。

1. AES加解密流程

首先,我们通过流程图来了解AES加解密的基本流程:

flowchart TD
    A[初始化密钥] --> B[加密数据]
    B --> C[传输数据]
    C --> D[解密数据]
    D --> E[使用数据]

2. Java AES加解密工具类

在Java中,我们可以使用Cipher类来实现AES加解密。下面是一个简单的AES加解密工具类的实现:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

public class AESUtil {
    private static final String ALGORITHM = "AES";

    public static SecretKey generateKey() throws NoSuchAlgorithmException {
        KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);
        keyGenerator.init(128); // 也可以使用192或256位密钥
        return keyGenerator.generateKey();
    }

    public static String encrypt(String data, SecretKey key) throws Exception {
        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] encryptedData = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encryptedData);
    }

    public static String decrypt(String encryptedData, SecretKey key) throws Exception {
        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, key);
        byte[] decryptedData = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
        return new String(decryptedData);
    }
}

3. 使用示例

下面是使用上述工具类的示例代码:

public class Main {
    public static void main(String[] args) {
        try {
            SecretKey key = AESUtil.generateKey();
            String originalData = "Hello, AES!";
            String encryptedData = AESUtil.encrypt(originalData, key);
            String decryptedData = AESUtil.decrypt(encryptedData, key);

            System.out.println("Original Data: " + originalData);
            System.out.println("Encrypted Data: " + encryptedData);
            System.out.println("Decrypted Data: " + decryptedData);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

4. 序列图

接下来,我们使用序列图来展示AES加解密过程中的交互:

sequenceDiagram
    participant User as U
    participant AESUtil as A
    participant Cipher as C
    participant KeyGenerator as KG

    U->>A: generateKey()
    A->>KG: init(128)
    KG-->>A: SecretKey
    U->>A: encrypt(data, key)
    A->>C: init(ENCRYPT_MODE, key)
    C-->>A: Cipher
    A->>C: doFinal(data.getBytes())
    C-->>A: encryptedData
    A->>U: Base64(encryptedData)
    U->>A: decrypt(encryptedData, key)
    A->>C: init(DECRYPT_MODE, key)
    C-->>A: Cipher
    A->>C: doFinal(Base64.decode(encryptedData))
    C-->>A: decryptedData
    A->>U: decryptedData

5. 结语

通过本文的介绍,我们了解到了Java中实现AES加解密的基本方法和流程。AES作为一种高效的对称加密算法,在保护数据安全方面发挥着重要作用。希望本文能够帮助读者更好地理解和使用Java中的AES加解密功能。