Base64
编码二进制到文本的编码方案
Base64 是一种把任意二进制数据表示为 64 个可打印 ASCII 字符的编码方案,由 RFC 4648(2006)规范,广泛用于邮件附件、Data URL 与文本协议中传输二进制数据。
什么是 Base64
Base64 将每 3 个字节(24 位)的输入重新切分为 4 组各 6 位,再用 A–Z、a–z、0–9、+、/ 共 64 个可打印字符各表示一组。因为所有表示单元都是 6 位而字节是 8 位,长度不是 3 的倍数时用 = 号补位。名字里的 64 指的是字符表大小,而不是进制——它本质是把二进制流"抄写"成安全文本,不是数字进制转换。
能做什么
凡是在"只认文本"的通道里传二进制,都会见到它:
- MIME 电子邮件附件(RFC 2045,1996 年起)
- Data URL:把小图片直接内嵌进 CSS/HTML,减少请求
- HTTP Basic 认证的用户名:密码传递(RFC 7617)
- JWT 的三段式负载也是 Base64URL 编码
起源与标准
Base64 的雏形来自 1987 年的隐私增强邮件(RFC 989),成熟于 MIME 标准(RFC 2045),现行规范是 2006 年发布的 RFC 4648。RFC 4648 同时定义了 Base32、Base16,以及把 + / 换成 - _ 的 URL 安全变体(Base64url),后者用于 JWT、URL 参数等场景。
体积与性能
编码后体积约为原文的 4/3(增加约 33%),若再经 URL 编码或换行处理还会更大。对超过几百 KB 的数据,通常建议走真正的二进制通道(multipart、Blob)而不是 Base64 文本。编解码本身是 O(n) 的查表操作,现代引擎下 GB/s 量级。
常见误区
Base64 是编码不是加密——任何人拿到编码串都能零成本还原,绝不能用它保护密码或密钥。另外不同实现可能在每 76 个字符后插入换行(RFC 2045 风格),互相解析时要注意去除空白字符。