java实现BASE64加密/解密详解(附带源码)

Katie。 2025-05-07 10:17:32编程技术
529

1. 项目背景与介绍

在日常开发中,Base64 编码是一种常见的数据处理方式,广泛应用于以下场景:

  • 数据传输:将二进制数据转换为 ASCII 字符串,方便在文本协议(如 JSON、XML)中传输。

  • 数据存储:避免特殊字符导致的数据解析错误,例如在 URL 或 Cookie 中存储二进制数据。

  • 加密辅助:用于编码密钥、证书、公私钥等,但 Base64 本身并不是加密算法,它只是编码方式。

本项目将展示如何使用 Java 内置的 Base64 类进行 Base64 编码(加密)和解码(解密)。

base64.webp

2. 相关知识

2.1 Base64 简介

Base64 是一种基于 64 个可打印字符的编码方式,它可以将 任意二进制数据转换为 ASCII 字符串,避免在传输或存储时出现编码问题。

Base64 采用的 64 个字符如下(大小写字母 + 数字 + 两个符号):

ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789
+/

此外,Base64 可能会在末尾填充 = 号,使其长度为 4 的倍数。

2.2 Java Base64 类

从 Java 8 开始,java.util.Base64 提供了三种 Base64 编码器:

编码器 说明
Base64.getEncoder() 标准 Base64 编码
Base64.getUrlEncoder() URL 安全的 Base64 编码(+ 替换为 -/ 替换为 _
Base64.getMimeEncoder() MIME 编码(每 76 个字符换行)

相应地,解码器 Base64.getDecoder() 可以将 Base64 字符串转换回原始数据。

3. 项目实现思路

  • 编码(加密)

    • 通过 Base64.getEncoder().encodeToString(byte[]) 方法,将字符串转换为 Base64 编码格式。

  • 解码(解密)

    • 通过 Base64.getDecoder().decode(String) 方法,将 Base64 编码的数据转换回原始字符串。

  • 实现不同 Base64 变体

    • 标准 Base64:用于常规数据编码。

    • URL Base64:适用于 URL 传输,避免 + 和 / 影响 URL 解析。

    • MIME Base64:适用于电子邮件或其他需要换行的场景。

4. 完整代码实现

以下 Java 代码实现了 Base64 编码和解码功能,支持三种模式(标准、URL 安全、MIME)。

import java.util.Base64;

/**
 * Base64EncoderDecoder 类用于演示 Java 8 提供的 Base64 编码和解码功能。
 * 该类支持三种编码模式:标准 Base64、URL 安全 Base64、MIME Base64。
 */
public class Base64EncoderDecoder {

    /**
     * 使用标准 Base64 编码字符串
     *
     * @param input 原始字符串
     * @return Base64 编码后的字符串
     */
    public static String encodeBase64(String input) {
        return Base64.getEncoder().encodeToString(input.getBytes());
    }

    /**
     * 使用标准 Base64 解码字符串
     *
     * @param base64Str Base64 编码的字符串
     * @return 解码后的原始字符串
     */
    public static String decodeBase64(String base64Str) {
        byte[] decodedBytes = Base64.getDecoder().decode(base64Str);
        return new String(decodedBytes);
    }

    /**
     * 使用 URL 安全的 Base64 编码字符串
     *
     * @param input 原始字符串
     * @return URL 安全的 Base64 编码字符串
     */
    public static String encodeBase64Url(String input) {
        return Base64.getUrlEncoder().encodeToString(input.getBytes());
    }

    /**
     * 使用 URL 安全的 Base64 解码字符串
     *
     * @param base64UrlStr URL 安全的 Base64 编码字符串
     * @return 解码后的原始字符串
     */
    public static String decodeBase64Url(String base64UrlStr) {
        byte[] decodedBytes = Base64.getUrlDecoder().decode(base64UrlStr);
        return new String(decodedBytes);
    }

    /**
     * 使用 MIME Base64 编码字符串(适用于邮件和换行文本)
     *
     * @param input 原始字符串
     * @return MIME Base64 编码的字符串
     */
    public static String encodeBase64Mime(String input) {
        return Base64.getMimeEncoder().encodeToString(input.getBytes());
    }

    /**
     * 主方法,测试 Base64 编码与解码
     *
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        String originalString = "Hello, Base64!";

        // 标准 Base64 编码/解码
        String encoded = encodeBase64(originalString);
        String decoded = decodeBase64(encoded);

        System.out.println("原始字符串: " + originalString);
        System.out.println("Base64 编码: " + encoded);
        System.out.println("Base64 解码: " + decoded);

        // URL Base64 编码/解码
        String urlEncoded = encodeBase64Url(originalString);
        String urlDecoded = decodeBase64Url(urlEncoded);

        System.out.println("\nURL 安全 Base64 编码: " + urlEncoded);
        System.out.println("URL 安全 Base64 解码: " + urlDecoded);

        // MIME Base64 编码(用于邮件等换行文本)
        String mimeEncoded = encodeBase64Mime(originalString);
        System.out.println("\nMIME Base64 编码: " + mimeEncoded);
    }
}

5. 代码解读

5.1 标准 Base64 编码

  • 使用 Base64.getEncoder().encodeToString(byte[]) 将字符串转换为 Base64 编码格式。

  • 解码时使用 Base64.getDecoder().decode(String),转换回原始字符串。

5.2 URL 安全 Base64 编码

  • Base64.getUrlEncoder() 生成的 Base64 字符串避免了 + 和 /,适用于 URL 传输。

  • Base64.getUrlDecoder() 进行解码。

5.3 MIME Base64 编码

  • Base64.getMimeEncoder() 适用于需要换行的场景(如电子邮件、长文本)。

  • 由于 MIME 形式的 Base64 可能包含换行符,解码时需注意处理换行问题。

6. 项目总结与扩展

6.1 本项目的收获

  • 掌握 Base64 基本原理:理解 Base64 如何转换二进制数据为可打印字符,及其应用场景。

  • 熟悉 Java Base64 API:学会使用 Base64 类进行标准、URL 安全和 MIME 编码/解码。

  • 区分编码与加密:Base64 只是编码方式,不具备加密能力,应与加密算法结合使用(如 AES + Base64)。

6.2 可能的扩展方向

  • 结合 AES、RSA 加密:Base64 可用于存储和传输加密数据。

  • 结合 JWT 认证:JWT 的 payload 采用 Base64 编码。

  • 应用于 HTTP 认证:Basic Auth 使用 Base64 传输用户名和密码(但不安全,应配合 HTTPS)。

通过本项目的实现,读者不仅可以掌握 Base64 编码/解码的基本方法,还能更好地理解其在信息传输和数据存储中的实际应用。希望这篇文章能帮助你深入理解 Base64 技术,并在项目中灵活应用。

相关工具推荐

java base64解密 base64加密
THE END
蜜芽
故事不长,也不难讲,四字概括,毫无意义。

相关推荐

Java日志管理框架:Log4j、SLF4J、Logback对比与使用方法详解
java主流日志框架中,Log4j 1.x作为早期标准,Log4j 2.x通过重构实现性能飞跃,Logback作为Log4j的继承者以原生SLF4J支持成为主流选择,而SLF4J作为日志门面,通过抽象层实现...
2025-09-15 编程技术
534

Java 与 MySQL 性能优化:MySQL全文检索查询优化实践
本文聚焦Java与MySQL协同环境下的全文检索优化实践,从索引策略、查询调优、参数配置到Java层优化,深入解析如何释放全文检索的潜力,为高并发、大数据量场景提供稳定高效的搜...
2025-09-13 编程技术
514

JavaScript 中 instanceof 的作用及使用方法详解
在 JavaScript 的类型检查体系中,instanceof 是一个重要的操作符,用于判断一个对象是否属于某个构造函数的实例或其原型链上的类型。本文ZHANID工具网将系统讲解 instanceof...
2025-09-11 编程技术
504

Java与MySQL数据库连接实战:JDBC使用教程
JDBC(Java Database Connectivity)作为Java标准API,为开发者提供了统一的数据访问接口,使得Java程序能够无缝连接各类关系型数据库。本文ZHANID工具网将以MySQL数据库为例...
2025-09-11 编程技术
498

JavaScript出现“undefined is not a function”错误的解决方法
在JavaScript开发中,TypeError: undefined is not a function 是最常见的运行时错误之一,通常表示代码尝试调用一个未定义(undefined)的值作为函数。本文ZHANID工具网将从...
2025-09-10 编程技术
518

Java集合框架:List、Set、Map的使用与区别详解
Java集合框架是JDK中提供的核心数据结构库,为开发者提供了高效、安全、可扩展的集合操作能力。本文ZHANID工具网将系统解析List、Set、Map三大核心接口的实现类及其使用场景,...
2025-09-09 编程技术
481