第 1 课

什么是 Base64?

Base64 为何存在,以及开发者日常在哪些场景遇到它。

Base64 是一种 二进制到文本的编码(binary-to-text)。它把任意字节序列(照片、密文、protobuf、压缩包等)映射为一组受限的 64 个可打印 ASCII 字符。对人眼看起来像乱码,但在“只能传文本”的通道里相对稳定。

要特别强调的是:Base64 不是加密。只要拿到编码串,就可以在不知道密钥的情况下还原出原始字节(除非你另外叠了真正的密码学机制)。

为什么需要二进制到文本编码

历史上很多通道默认“传输的是 可读文本”:

  • 邮件正文与早期 MIME 部件
  • 不适合塞入原始空字节或含糊控制字符的 JSON/XML 片段
  • 难以承载任意二进制、或会被日志链路破坏的 URL 参数
  • 调试时在不搞乱终端的前提下打印字节的摘要

Base64解决的是传输问题:让字节在安全、可打印的文本形式下流动。它不保证保密性、真实性,也不压缩数据。

开发者常见接触点

你几乎一定会在这些地方遇到 Base64:

  • JWT 的三段结构header.payload.signature)——各部分通常是 JSON 的字节再做 Base64(常见为 URL-safe 变体)
  • 在 HTML/CSS 里用 data:image/png;base64,... 嵌入小图片
  • Authorization: Basic ...——对 用户名:密码 的字节做编码(线上仍必须有 HTTPS)
  • 密码学与证书设施——PEM 把 DER 二进制包上一层 Base64;不少协议在文本信封里运送 Base64 载荷
  • 为了兼容性,把数据库或 API opaque blob 存成 VARCHAR/TEXT 字段

ASCII 文本与 Unicode 文本

要把“可读文本”(例如 "hello"、中文句子)编成 Base64,一般应先用 UTF-8(或其他一致编码)得到字节,再对那些字节做 Base64。混淆“这已经是 Unicode 字符串”和“这是一串原始八位组”,是后面课时里很多 bug 的根源。

字母表一览

最常见的一套字母表包含 A–Za–z0–9+/,末尾可出现 = 填充。精确的位分组与填充规则见后续课程。

要点小结

Base64 把 不透明字节变成安全的 ASCII 文本。掌握这一概念之后,JWT、PEM、data: 小图标,以及“二进制字段却以字符串传送”的 API,都会变得更直观——即便你每天都在用库函数完成编码本身。

想动手练习时,可使用 DevCove 相关工具——可选,不属于本课正文。

打开相关工具

返回课程概览