Base64编码

Base64 是一种将2进制数据编码为 ASCII 字符的编码方式。它主要用于在文本环境中传输或存储二进制数据,例如在电子邮件、URL 或 JSON 中传输文件或图像数据。Base64 编码后的数据由 64 个字符(A-Z, a-z, 0-9, '+', '/')组成,并且可能包含填充字符 =

Base64是一种“二进制转换到文本”的编码方式,它能够将任意二进制数据转换为ASCII字符串的形式,以便在只支持文本的环境中也能够顺利地传输二进制数据。

(1)base64编码:把二进制数据转为字符;

(2)base64解码:把字符转为二进制数据;


Base64 编码的原理

  1. 输入数据分组

    • 将二进制数据按每 3 个字节(24 位)分为一组。

    • 如果最后一组不足 3 个字节,则用 0 填充。

  2. 转换为 6 位单位

    • 将 24 位数据分为 4 个 6 位的单位。

    • 每个 6 位的单位可以表示 0 到 63 的数值。

  3. 映射到 Base64 字符表

    • 将每个 6 位的数值映射到 Base64 字符表中的对应字符。

    • Base64 字符表为:A-Z, a-z, 0-9, '+', '/'

  4. 填充字符

    • 如果最后一组不足 3 个字节,编码后会少 1 或 2 个字符,此时用 = 填充。


Base64 编码示例

假设输入数据为 Man(ASCII 值为 77 97 110):

  1. 二进制表示

    M (77) -> 01001101
    a (97) -> 01100001
    n (110) -> 01101110
  2. 合并为 24 位

    01001101 01100001 01101110
  3. 分为 4 个 6 位单位

    010011 010110 000101 101110
  4. 转换为十进制

    19 22 5 46
  5. 映射到 Base64 字符表

    19 -> T
    22 -> W
    5 -> F
    46 -> u
  6. 编码结果

    TWFu


Base64 填充示例

如果输入数据为 Ma(ASCII 值为 77 97):

  1. 二进制表示

    M (77) -> 01001101
    a (97) -> 01100001
  2. 合并为 16 位(不足 24 位,填充 0)

    01001101 01100001 00000000
  3. 分为 4 个 6 位单位

    010011 010110 000100 000000
  4. 转换为十进制

    19 22 4 0
  5. 映射到 Base64 字符表

    19 -> T
    22 -> W
    4 -> E
    0 -> A
  6. 填充 =

    因为原始数据只有 2 字节,所以需要填充 1 个 =。

  7. 编码结果

    TWE=


Base64 字符表

索引字符索引字符索引字符索引字符
0A16Q32g48w
1B17R33h49x
2C18S34i50y
3D19T35j51z
4E20U36k520
5F21V37l531
6G22W38m542
7H23X39n553
8I24Y40o564
9J25Z41p575
10K26a42q586
11L27b43r597
12M28c44s608
13N29d45t619
14O30e46u62+
15P31f47v63/

Base64 的应用场景

  1. 数据传输

    • 在 HTTP 请求中传输二进制数据(如图片、文件)。

    • 在 JSON 中嵌入二进制数据。

  2. 数据存储

    • 将二进制数据存储为文本格式(如数据库中的 BLOB 字段)。

  3. URL 安全

    • 使用 URL 安全的 Base64 变种(将 + 和 / 替换为 - 和 _)。

  4. 电子邮件

    • 在电子邮件中传输附件。


Base64 的优缺点

优点

  • 将二进制数据转换为文本格式,便于在文本环境中传输和存储。

  • 编码和解码算法简单,易于实现。

缺点

  • 编码后的数据比原始数据大 33%(每 3 字节编码为 4 字符)。

  • 不适合加密敏感数据,因为 Base64 不是加密算法。


Java 中的 Base64 实现

Java 提供了内置的 Base64 工具类(java.util.Base64),可以方便地进行编码和解码:

import java.util.Base64;

public class Base64Example {
    public static void main(String[] args) {
        String original = "Hello, World!";
        
        // 编码
        String encoded = Base64.getEncoder().encodeToString(original.getBytes());
        System.out.println("Encoded: " + encoded); // SGVsbG8sIFdvcmxkIQ==
        
        // 解码
        byte[] decodedBytes = Base64.getDecoder().decode(encoded);
        String decoded = new String(decodedBytes);
        System.out.println("Decoded: " + decoded); // Hello, World!
    }
}

总结

Base64 是一种常用的编码方式,适用于在文本环境中传输或存储二进制数据。它的核心思想是将二进制数据转换为 ASCII 字符,并通过填充字符 = 处理不足 3 字节的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值