一句话了解 Base64
Base64 是一种在 RFC 4648 中定义的二进制到文本的编码方式,它把每 3 个字节的数据表示为 4 个字符,这些字符来自由 A–Z、a–z、0–9、+ 和 / 组成的字母表。
为什么需要 Base64
许多系统最初只为文本而设计,例如电子邮件(SMTP)、JSON、XML、HTML 属性、URL 和终端。图片或 PDF 等原始二进制数据中可能包含这些系统会修改或拒绝的字节。Base64 把数据转换成安全的可打印字符,确保它在传输过程中原样送达。
Base64 编码原理分步详解
- 取输入字节:
M、a、n= 77、97、110。 - 将它们写成 24 位二进制:
01001101 01100001 01101110。 - 把这些位拆分为四组,每组 6 位:
010011 010110 000101 101110= 19、22、5、46。 - 在字母表中查找每个数字对应的字符:19 =
T,22 =W,5 =F,46 =u。
于是 Man 就变成了 TWFu。解码只需将上述步骤反过来执行即可。
Base64 字母表
| 数值 | 字符 |
|---|---|
| 0–25 | A–Z |
| 26–51 | a–z |
| 52–61 | 0–9 |
| 62 | +(URL 安全:-) |
| 63 | /(URL 安全:_) |
| 填充 | = |
= 填充的含义
当输入长度不是 3 的倍数时,最后一组会被补齐,并用 = 标记:Ma 编码为 TWE=,M 编码为 TQ==。在有效的 Base64 字符串中,填充符永远不会出现在中间。
Base64 的变体
- 标准 Base64(RFC 4648):使用上述字母表,并带有
=填充。 - Base64URL:使用
-和_,通常不带填充,用于 URL、文件名和 JWT。 - MIME Base64:使用标准字母表,每 76 个字符换行,用于电子邮件。
Base64 不是加密
Base64 不会隐藏任何内容,任何人都能瞬间解码。由于输出看起来像随机字符,它常被误认为是一种保护手段。保护机密请使用 AES 等真正的加密算法,Base64 只用于把加密后的字节以文本形式传输。
体积开销
编码后的长度为 4 × ⌈n / 3⌉ 个字符(n 为字节数),比原始数据大约多 33%。如果加上 MIME 换行,还会再增加 2–3%。
Base64 的应用场景
- 电子邮件附件(MIME)
- HTML 和 CSS 中用于图片和字体的 Data URI
- JSON 和 XML API 中的二进制字段
- JSON Web Token 和 OAuth
- HTTP Basic 认证请求头
- PEM 证书和 SSH 密钥
- Kubernetes Secret 和配置文件
常见问题
Base64 和加密、哈希是一回事吗?
不是。加密需要密钥才能还原,哈希则完全不可逆,而 Base64 任何人都能解码。
为什么叫 Base64?
因为它使用由 64 个字符组成的字母表,每个字符携带 6 位信息(26 = 64)。
如何判断一个字符串是不是 Base64?
它只包含 A–Z、a–z、0–9、+、/(或 - 和 _),长度通常是 4 的倍数,末尾可能带有一个或两个 = 号。最快的方法是直接粘贴到我们的解码器中试一试。
最后更新: