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

 更新时间:2025年05月06日 10:37:43   作者:Katie。  
这篇文章主要介绍了java中BASE64加密/解密的相关资料,并详细展示了如何在Java中使用内置的Base64类进行编码和解码,文章还涵盖不同类型的Base64编码及其应用场景,需要的朋友可以参考下

1. 项目背景与介绍

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

  • 数据传输:将二进制数据转换为 ASCII 字符串,方便在文本协议(如 JSON、XML)中传输。
  • 数据存储:避免特殊字符导致的数据解析错误,例如在 URL 或 Cookie 中存储二进制数据。
  • 加密辅助:用于编码密钥、证书、公私钥等,但 Base64 本身并不是加密算法,它只是编码方式。

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

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加密/解密的文章就介绍到这了,更多相关java BASE64加密/解密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Springboot通过图片路径形式获取图片

    Springboot通过图片路径形式获取图片

    这篇文章主要介绍了Springboot通过图片路径形式获取图片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Maven Optional依赖属性的含义及妙用

    Maven Optional依赖属性的含义及妙用

    这篇文章主要为大家介绍了Maven Optional依赖属性的含义及妙用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Java 详细讲解线程的状态及部分常用方法

    Java 详细讲解线程的状态及部分常用方法

    在Java程序中,一个线程对象只能调用一次start()方法启动新线程,并在新线程中执行run()方法。一旦run()方法执行完毕,线程就结束了,本篇来讲解Java线程的状态以及部分常用方法
    2022-04-04
  • 详解Java实现单例的五种方式

    详解Java实现单例的五种方式

    这篇文章主要介绍了详解Java实现单例的五种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Java中的@Conditional条件注解详细解析

    Java中的@Conditional条件注解详细解析

    这篇文章主要介绍了Java中的@Conditional条件注解详细解析,@Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean,需要的朋友可以参考下
    2023-11-11
  • 详谈JSON与Javabean转换的几种形式

    详谈JSON与Javabean转换的几种形式

    下面小编就为大家带来一篇详谈JSON与Javabean转换的几种形式。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Java实现ArrayList自动扩容

    Java实现ArrayList自动扩容

    ArrayList的扩容规则是非常简单的,它会根据需要自动扩容,本文就来介绍一下Java实现ArrayList自动扩容,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • Java课设案例之百行代码实现简易计算器

    Java课设案例之百行代码实现简易计算器

    下面这篇文章主要给大家介绍了关于Java课设案例之百行代码实现简易计算器的相关资料,这是一个关于java简单计算器的完整课程设计以及源码,需要的朋友可以参考下
    2023-06-06
  • Spring Boot ActiveMQ连接池配置过程解析

    Spring Boot ActiveMQ连接池配置过程解析

    这篇文章主要介绍了Spring Boot ActiveMQ连接池配置过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • JAVA字符串类型switch的底层原理详析

    JAVA字符串类型switch的底层原理详析

    这篇文章主要给大家介绍了关于JAVA字符串类型switch的底层原理的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用JAVA具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09

最新评论