Skip to content

Base64 编码 ​

TIP

不算加密,一种编码方式,应用的场景还挺多的🤔

简介 ​

Base64的核心目标是将二进制数据转换为纯文本,以便在仅支持文本的环境中处理二进制内容。以下是其典型应用场景:

  1. 电子邮件传输 早期电子邮件协议仅支持ASCII文本,通过Base64编码可将附件(如图片、文档)转为文本传输。
  2. 网页资源内嵌 将小图片转为Base64字符串嵌入HTML/CSS,减少HTTP请求,提升加载速度(需权衡文件大小)。
  3. API数据传输 在JSON或XML中安全传输二进制数据(如加密后的密钥)。
  4. URL与Cookie安全 URL安全的Base64变体可用于传递参数,避免特殊字符冲突。

编码原理 ​

基本规则 ​

  • 字符集:包含 A-Z、a-z、0-9、+、/ 共64个字符,= 用于填充。
  • 转换流程:
    1. 将二进制数据按每3字节(24bit) 分组。
    2. 每组拆分为4个6bit片段,每个片段转为十进制数。
    3. 查Base64索引表,将十进制数转为对应字符。

编码过程 ​

如下图所示

base64-man-twfu.webp

填充规则 ​

  • 若二进制数据不足3字节倍数,末尾补0x00,编码后添加=表示填充:
    • 补1字节 → 加1个=
    • 补2字节 → 加2个=

编码效率 ​

  • 缺点:编码后数据体积增加约33%(3字节→4字符)。
  • 适用场景:小文件或文本协议传输,避免大文件使用。

变体与安全性 ​

URL安全变体 ​

  • 问题:标准Base64中的+和/在URL中需转义。
  • 解决方案:使用-代替+,_代替/,并省略填充符=(可选)。

常见同类 ​

这些是与 Base64 同类的编码方案,但使用不同的字符集大小,因此不是 Base64 的变体。

  • Base32

    • 字符集:32 个字符(通常是 A-Z 去掉易混淆的 0, 1, 8 等,或使用 A-Z2-7)。

    • 特点:比 Base64 更长,但容错性更好(减少字符混淆,如 0 和 O),且不包含特殊符号。

    • 用途:一次性密码(TOTP/HOTP)、短码、需要高可读性的场景。

  • Base16 (Hexadecimal, 十六进制)

    • 字符集:16 个字符(0-9, A-F 或 a-f)。

    • 特点:编码后数据体积是原始数据的两倍(每字节转为两个字符),但最简单、最通用,无任何特殊字符。

    • 用途:颜色代码、校验和(如 MD5, SHA-1)、底层数据表示。

  • Base62

    • 字符集:62 个字符(0-9, A-Z, a-z),不包含 +, /, = 等符号。

    • 特点:生成的字符串仅包含字母和数字,非常适合生成短链接、数据库 ID。

    • 注意:Base62 是一个独立的编码,因为其字符集更小(62 vs 64),且设计目标是纯字母数字。

参考三三 ​

如有转载或 CV 请标注本站原文地址