java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > java AES加密解密

java AES加密/解密实现完整代码(附带源码)

作者:Katie。

这篇文章主要介绍了java AES加密/解密实现的相关资料,包括AES加密算法的基本原理、Java加密API的使用方法以及项目实现的步骤和代码示例,需要的朋友可以参考下

1. 项目背景与介绍

在数据传输和存储过程中,保护敏感信息的安全性非常关键。AES(Advanced Encryption Standard,高级加密标准)是一种广泛使用的对称加密算法,具有高效、安全、易于实现等特点。由于 AES 使用同一个密钥进行加密和解密,因此密钥的管理非常重要。

本项目将通过 Java 内置的加密 API(主要在 javax.crypto 包中提供)实现 AES 加密与解密。示例中我们采用 AES/CBC/PKCS5Padding 模式,并使用一个 128 位(16 字节)的密钥和固定的初始向量(IV)。为了便于演示,本示例使用了固定的 IV,但在实际应用中,建议使用随机 IV,并将 IV 与密文一起存储或传输。

通过本项目,你将掌握如何使用 Java 进行 AES 加密和解密操作,并了解如何对密钥和初始向量进行设置、Base64 编码结果输出等知识点。

2. 相关知识

2.1 AES 加密算法

2.2 Java 加密 API

Java 提供了一整套加密相关的类:

3. 项目实现思路

本项目主要分为以下几个步骤:

4. 完整代码实现

下面是一份完整的 Java 代码示例,实现了 AES 加密与解密功能。代码中附有详细中文注释,便于理解每个步骤的实现细节。

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.spec.IvParameterSpec;
import java.util.Base64;

/**
 * AESEncryptionDemo 类演示了如何使用 Java 实现 AES 加密和解密。
 * 本示例使用 AES/CBC/PKCS5Padding 模式,密钥和初始向量均为 16 字节(128 位)。
 * 注意:示例中使用固定 IV 仅供学习,实际应用中应使用随机 IV 并与密文一起传输。
 */
public class AESEncryptionDemo {

    // AES 密钥(16 字节):请确保密钥足够随机和安全
    private static final String KEY = "0123456789abcdef";
    // 初始向量(IV,16 字节):实际应用中应随机生成
    private static final String IV = "abcdefghijklmnop";
    // 指定加密算法和模式
    private static final String ALGORITHM = "AES/CBC/PKCS5Padding";

    /**
     * 对给定的明文进行 AES 加密,并返回 Base64 编码后的密文字符串。
     *
     * @param plainText 明文字符串
     * @return Base64 编码后的密文字符串,如果加密过程中发生异常则返回 null
     */
    public static String encrypt(String plainText) {
        try {
            // 获取 Cipher 实例,指定使用 AES/CBC/PKCS5Padding 模式
            Cipher cipher = Cipher.getInstance(ALGORITHM);
            // 构造密钥规范
            SecretKeySpec keySpec = new SecretKeySpec(KEY.getBytes("UTF-8"), "AES");
            // 构造初始向量规范
            IvParameterSpec ivSpec = new IvParameterSpec(IV.getBytes("UTF-8"));
            // 初始化 Cipher 为加密模式
            cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
            // 对明文进行加密
            byte[] encryptedBytes = cipher.doFinal(plainText.getBytes("UTF-8"));
            // 使用 Base64 对密文字节数组进行编码,返回字符串
            return Base64.getEncoder().encodeToString(encryptedBytes);
        } catch (Exception e) {
            // 捕获异常并打印错误信息
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 对给定的 Base64 编码密文进行 AES 解密,还原出原始明文字符串。
     *
     * @param cipherText Base64 编码后的密文字符串
     * @return 解密后的明文字符串,如果解密过程中发生异常则返回 null
     */
    public static String decrypt(String cipherText) {
        try {
            // 获取 Cipher 实例,指定使用 AES/CBC/PKCS5Padding 模式
            Cipher cipher = Cipher.getInstance(ALGORITHM);
            // 构造密钥规范
            SecretKeySpec keySpec = new SecretKeySpec(KEY.getBytes("UTF-8"), "AES");
            // 构造初始向量规范
            IvParameterSpec ivSpec = new IvParameterSpec(IV.getBytes("UTF-8"));
            // 初始化 Cipher 为解密模式
            cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
            // 将 Base64 编码的密文转换为字节数组
            byte[] decodedBytes = Base64.getDecoder().decode(cipherText);
            // 对密文进行解密
            byte[] decryptedBytes = cipher.doFinal(decodedBytes);
            // 将解密后的字节数组转换为字符串
            return new String(decryptedBytes, "UTF-8");
        } catch (Exception e) {
            // 捕获异常并打印错误信息
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 主函数,演示 AES 加密和解密的完整流程。
     *
     * @param args 命令行参数(未使用)
     */
    public static void main(String[] args) {
        // 定义待加密的明文
        String plainText = "Hello, AES Encryption!";
        System.out.println("原始明文: " + plainText);

        // 对明文进行加密
        String encryptedText = encrypt(plainText);
        System.out.println("加密后的密文 (Base64 编码): " + encryptedText);

        // 对密文进行解密
        String decryptedText = decrypt(encryptedText);
        System.out.println("解密后的明文: " + decryptedText);
    }
}

5. 代码解读

5.1 密钥和初始向量设置

5.2 加密过程

5.3 解密过程

5.4 异常处理

6. 项目总结与展望

本项目通过 Java 实现了 AES 加密和解密的基本流程,主要收获和体会包括:

总之,本项目为开发者提供了一个简单、直观的 AES 加密/解密示例,既有助于理解对称加密的基本流程,也为构建实际安全通信系统提供了实践基础。希望这篇博客文章能为你在 Java 安全编程领域提供有价值的参考和启发。

总结

到此这篇关于java AES加密/解密实现的文章就介绍到这了,更多相关java AES加密解密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文