Java AES256 加密算法

简介

AES(Advanced Encryption Standard)是一种对称密钥加密算法,它是目前应用最广泛的加密算法之一。AES256是AES算法的一种变种,使用256位密钥进行加密和解密。在Java中,我们可以使用javax.crypto包中的类来实现AES256加密算法。

AES256加密示例

以下是一个使用Java实现AES256加密的示例代码:

import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.security.*;

public class AES256 {
    private static final String ALGORITHM = "AES";
    private static final String TRANSFORMATION = "AES/ECB/PKCS5Padding";

    public static byte[] encrypt(String plainText, String secretKey) throws Exception {
        Key key = generateKey(secretKey);
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        cipher.init(Cipher.ENCRYPT_MODE, key);
        return cipher.doFinal(plainText.getBytes());
    }

    public static String decrypt(byte[] cipherText, String secretKey) throws Exception {
        Key key = generateKey(secretKey);
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        cipher.init(Cipher.DECRYPT_MODE, key);
        byte[] result = cipher.doFinal(cipherText);
        return new String(result);
    }

    private static Key generateKey(String secretKey) throws Exception {
        byte[] keyBytes = secretKey.getBytes();
        MessageDigest digest = MessageDigest.getInstance("SHA-256");
        byte[] hashedBytes = digest.digest(keyBytes);
        return new SecretKeySpec(hashedBytes, ALGORITHM);
    }

    public static void main(String[] args) {
        try {
            String plainText = "Hello, World!";
            String secretKey = "SecretKey123";
            byte[] encryptedText = encrypt(plainText, secretKey);
            String decryptedText = decrypt(encryptedText, secretKey);

            System.out.println("Plain Text: " + plainText);
            System.out.println("Encrypted Text: " + new String(encryptedText));
            System.out.println("Decrypted Text: " + decryptedText);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

上述代码中,我们首先定义了ALGORITHMTRANSFORMATION常量,分别表示使用AES算法和ECB/PKCS5Padding填充模式。

encrypt方法接收明文和密钥作为参数,生成密钥并初始化加密器。然后,通过调用doFinal方法对明文进行加密并返回加密后的字节数组。

decrypt方法接收密文和密钥作为参数,同样生成密钥并初始化解密器。然后,通过调用doFinal方法对密文进行解密并返回解密后的字符串。

generateKey方法根据传入的密钥生成SHA-256散列后的字节数组,并使用该字节数组生成AES密钥。

main方法中,我们演示了如何使用encryptdecrypt方法对明文进行加密和解密。我们将"Hello, World!"作为明文进行加密,并将加密后的字节数组转为字符串输出。然后,我们使用同样的密钥对密文进行解密,并输出解密后的明文。

AES256加密流程图

下面是使用mermaid语法绘制的AES256加密流程图:

pie
  title AES256加密流程
  "生成密钥" : 25
  "加密明文" : 25
  "生成密文" : 25
  "解密密文" : 25

AES256类图

下面是使用mermaid语法绘制的AES256类图:

classDiagram
  class AES256 {
    - ALGORITHM : String
    - TRANSFORMATION : String
    - generateKey(String) : Key
    + encrypt(String, String) : byte[]
    + decrypt(byte[], String) : String
  }

  AES256 --> "javax.crypto.Cipher"
  AES256 --> "javax.crypto.spec.SecretKeySpec"
  AES256 --> "java.security.Key"
  AES256 --> "java.security.MessageDigest"

在上述类图中,AES256类包含了生成密钥、加密和解密方法。它依赖于javax.crypto和java.security包中的类来实现加密算法的各个步骤。

结论

在本文中,我们介绍了Java中如何使用AES256加密算法对数据进行加密和解密。我们提供了一个简单的示例代码,并使用mermaid语法绘制了加密流程图和类图。通过