Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java FAQ

java aes加解密


在 Java 中进行 AES 加解密有几种实现方式,我会为您介绍其中的三种常见方式:使用 Java 标准库、使用 Bouncy Castle 库、以及使用 Java 加密扩展(JCE)库。对于每种方式,我将提供详细的步骤流程和示例代码。

使用 Java 标准库

Java 标准库提供了对 AES 加解密的支持,无需额外导入库。

步骤流程

  1. 生成 AES 密钥。
  2. 创建 Cipher 对象,指定加密或解密模式。
  3. 初始化 Cipher 对象,传入密钥和初始化向量(如果需要)。
  4. 对数据进行加密或解密操作。

示例代码

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class AESExample {
    public static void main(String[] args) throws Exception {
        // 1. 生成AES密钥
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(128); // 可选:128、192或256位
        SecretKey secretKey = keyGenerator.generateKey();

        // 2. 创建Cipher对象
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); // ECB模式,使用PKCS5Padding填充

        // 3. 初始化Cipher对象
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);

        // 待加密的数据
        String plainText = "Hello, AES!";
        byte[] plaintextBytes = plainText.getBytes(StandardCharsets.UTF_8);

        // 4. 加密数据
        byte[] encryptedBytes = cipher.doFinal(plaintextBytes);

        System.out.println("Encrypted: " + Base64.getEncoder().encodeToString(encryptedBytes));
    }
}

使用 Bouncy Castle 库

Bouncy Castle 是一个流行的密码学库,支持各种加密算法,包括 AES。

Maven 依赖

<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.68</version> <!-- 最新版本请查阅Maven仓库 -->
</dependency>

步骤流程

  1. 生成 AES 密钥。
  2. 创建 Cipher 对象,指定加密或解密模式。
  3. 初始化 Cipher 对象,传入密钥和初始化向量(如果需要)。
  4. 对数据进行加密或解密操作。

示例代码

import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.security.Security;
import java.util.Base64;

public class BouncyCastleAESExample {
    public static void main(String[] args) throws Exception {
        Security.addProvider(new BouncyCastleProvider());

        // 1. 生成AES密钥
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES", "BC");
        keyGenerator.init(128); // 可选:128、192或256位
        SecretKey secretKey = keyGenerator.generateKey();

        // 2. 创建Cipher对象
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC"); // ECB模式,使用PKCS7Padding填充

        // 3. 初始化Cipher对象
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);

        // 待加密的数据
        String plainText = "Hello, AES with Bouncy Castle!";
        byte[] plaintextBytes = plainText.getBytes(StandardCharsets.UTF_8);

        // 4. 加密数据
        byte[] encryptedBytes = cipher.doFinal(plaintextBytes);

        System.out.println("Encrypted: " + Base64.getEncoder().encodeToString(encryptedBytes));
    }
}

使用 Java 加密扩展(JCE)库

JCE 库是 Java 的加密扩展,提供了丰富的加密算法支持。

步骤流程

  1. 生成 AES 密钥。
  2. 创建 Cipher 对象,指定加密或解密模式。
  3. 初始化 Cipher 对象,传入密钥和初始化向量(如果需要)。
  4. 对数据进行加密或解密操作。

示例代码

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.security.Provider;
import java.security.Security;

public class JCEAESExample {
    public static void main(String[] args) throws Exception {
        // 1. 生成AES密钥
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(128); // 可选:128、192或256位
        SecretKey secretKey = keyGenerator.generateKey();

        // 2. 创建Cipher对象
        Provider provider = Security.getProvider("SunJCE");
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding", provider); // ECB模式,使用PKCS5Padding填充

        // 3. 初始化Cipher对象
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);

        // 待加密的数据
        String plainText = "Hello, AES with JCE!";
        byte[] plaintextBytes = plainText.getBytes(StandardCharsets.UTF_8);

        // 4. 加密数据
        byte[] encryptedBytes = cipher.doFinal(plaintextBytes);

        System.out.println("Encrypted: " + Base64.getEncoder().encodeToString(encryptedBytes));
    }
}

请注意,这些示例中的代码仅仅是为了演示目的,实际应用中需要注意更多细节,如密钥管理、安全性等。另外,随着时间的推移,库的版本可能会有所变化,您应该查阅最新的文档来确保正确的使用方式。

Java 没有内置的字符串类型,而是在标准 Java 类库中提供了一个预定义类,很自然地叫做 String。每个用双引号括起来的字符串都是 ...
在Java中使用Redis主要涉及使用Redis客户端库来与Redis服务器进行通信。步骤流程:添加Maven依赖:编写Java代码示例:# ...
Java 是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级 Web 应用开发和移动应用开发。 ...
数组是一种数据结构,用来存储同一类型值的集合。通过一个整型下标可以访问数组中的每一个值。例如,如果 a 是一个整型数组,a[i] 就是数组中 ...
环境相关MacOS如何彻底卸载各版本的jdk(java开发环境)语法相关java中trycatchfinally语句中同时包含return时 ...