Base64 与各类编码对照速查

6 个速查板块 · 关联 6 款站内工具 · 数据最后核对 2026-10-05

Base64 不是加密、体积为什么会涨三分之一、URL 编码和 HTML 实体又各管什么——三种「编码」的区别一次说清。

Base64 常被误以为是一种加密方式,这是最需要先纠正的一点:它只是把二进制数据换成可打印字符的「搬运」手段,任何人都能立刻还原,没有任何保密能力。它真正解决的问题是——某些通道只允许传输文本。

同样容易被混在一起的是另外两种编码:URL 里看到的 %E4%B8%AD 是百分号编码,HTML 里看到的 & 是实体编码。它们和 Base64 的目标各不相同。这篇先讲 Base64 本身,再把三者放在一起对照。

1Base64 的基本规则

核心思想很简单:把每 3 个字节(24 位)切成 4 组 6 位,每组映射到一个可打印字符。因为 6 位能表示 64 种取值,所以叫 Base64。

要素内容说明
字母表A-Z + a-z + 0-9 + + + /共 64 个字符,顺序固定,不能自行调整
填充符=数据长度不是 3 的倍数时补齐,使输出长度恒为 4 的倍数
输出长度输入字节数 × 4 ÷ 3因为每 3 字节变 4 字符,所以体积约增加 33%
是否可逆完全可逆编码与解码是确定的双向映射,不涉及密钥
是否加密**不是加密**任何人拿到编码结果都能直接还原,切勿用它保护敏感数据

体积膨胀是 Base64 的固有代价:100 KB 的文件编码后约 133 KB。所以在传输大文件时,直接传二进制(multipart 表单、原始请求体)比 Base64 更高效;Base64 更适合「必须嵌在文本里」的场景。

2变体:URL-safe、无填充

标准字母表里的 + 和 / 在 URL 中有特殊含义,直接放进地址会出问题。于是出现了几种变体,对接时务必确认对方用的是哪一种。

变体与标准的差别出现场景
标准 Base64含 + / 与填充 =邮件附件、data URI
URL-safe Base64+ 换成 -,/ 换成 _JWT、URL 参数、文件名
无填充变体去掉末尾的 =部分 API 与库的默认行为,如 JWT
MIME Base64每 76 个字符插入换行邮件正文传输
Base64url(严格)URL-safe + 去填充RFC 4648 定义的 URL 与文件名安全形式

对接 JWT 或第三方 API 时,最常见的坑就是「用标准 Base64 去解一个 URL-safe 的结果」——遇到 `-` `_` 会直接失败。解析前先把这两个字符替换回 `+` `/` 再补上填充,是稳妥的做法。

3与其他进制的横向对比

Base64 不是唯一的选择。字母表越大,体积越接近原始数据,但可读性与容错性越差。

编码字母表大小体积膨胀特点
Base16 / Hex16(0-9A-F)约 +100%体积翻倍,但最易读,常见于哈希值与颜色值
Base3232(A-Z2-7)约 +60%不区分大小写,适合人工抄录与部分二次验证码
Base6464约 +33%最常用的折中方案
Base5858(去掉了易混字符)约 +37%比特币地址使用,避免 0OIl 与 +/ 混淆
Base85 / Ascii8585约 +25%体积更小,但字母表包含大量符号,可读性差

4三种「编码」别混:Base64 / 百分号 / HTML 实体

它们都叫「编码」,但目标、字母表、使用位置完全不同。选错的后果是数据被多解一次或少了关键转义。

编码解决什么问题典型样子常见场景
Base64让二进制数据能走纯文本通道5Lit5paHdata URI、JWT、邮件附件、图片内联
百分号编码让任意字符能安全放进 URL%E4%B8%AD%E6%96%87URL 参数、表单提交
HTML 实体让字符不被当成 HTML 标签解析&、'页面输出用户内容、防止 XSS
Unicode 转义在源码里表示无法直接输入的字符\u4e2d编程语言字符串、JSON 内容
三者关系互不替代同一段文字经三种编码会得到三种完全不同的结果选错编码是最常见的「看起来对、用起来错」

5HTML 实体的两种写法与安全意义

HTML 实体有具名与数字两种写法,效果等价。它在安全上的作用比在显示上更重要——这是防 XSS 的第一道处理。

具名实体
&amp;(&)、&lt;(<)、&gt;(>)、&quot;(")、&nbsp;(不换行空格)
数字实体
十进制 &#39;、十六进制 &#x27;,都能表示单引号
为什么必须转义
用户输入里的 < > 如果不转义,浏览器会把它们当作标签解析;把一段脚本注进评论区就能执行,这就是 XSS
至少转义四个
& < > ",属性值里还要处理单引号。顺序上必须先转 &,否则会把已经生成实体的 & 再转一次
上下文的差别
HTML 正文、属性值、URL、JavaScript 字符串里需要的转义规则各不相同,不能一套规则到处用
编码与转义不是加密
它们都完全可逆,只提供「表达」上的安全,不提供「保密」上的安全

6Base64 在真实系统里的四个出现位置

data URI
把图片、字体直接嵌进 CSS 或 HTML,减少请求数。代价是体积增大且无法单独缓存,只适合小图标
JWT
头部与载荷分别用 Base64url 编码后拼接,再附上签名。注意载荷只是编码、并未加密,任何人都能读出内容
HTTP Basic 认证
把「用户名:密码」Base64 后放进 Authorization 头。这只是编码,必须依赖 HTTPS 才有意义
接口传二进制
把文件转成字符串放进 JSON 字段。方便但有体积开销,大文件应改用 multipart 上传

关于「Base64 与各类编码对照速查」的常见问题

Base64 是一种加密吗?

不是。Base64 只是编码,把二进制数据映射成可打印字符,任何人都能直接还原,不需要密钥,也不提供任何保密能力。它解决的问题是「某些通道只允许传文本」(例如邮件正文、URL 参数、JSON 字段)。真正的加密需要密钥,且不掌握密钥就无法还原。所以把敏感信息做一次 Base64 就当「已加密」处理,是相当危险的做法——必须配合 HTTPS 或使用真正的加密算法。

为什么 Base64 编码后文件变大了?

因为 Base64 把每 3 个字节(24 位)重新切成 4 组 6 位,每组用一个字符表示,所以每 3 字节变成 4 个字符,体积约增加三分之一(实际约 33%)。再加上不足 3 字节时要用 = 补齐,最终长度总是 4 的倍数。这是 Base64 的固有代价,无法通过压缩消除。所以大文件传输应优先使用二进制方式(multipart 上传、直接传请求体),Base64 只用在「必须嵌进文本通道」的场景。

标准 Base64 和 URL-safe Base64 有什么区别?

字母表有两个字符不同:标准版用 + 和 /,URL-safe 版换成 - 和 _,因为 + / 在 URL 里有特殊含义(前者在查询串中可能被解释成空格,后者是路径分隔符)。此外 JWT 等场景还会去掉末尾的 = 填充。两者不能用同一个解析器直接互解——拿到一段 Base64url 结果用标准解码器处理,遇到 - _ 就会失败。稳妥做法是先替换回 + /、补上填充再解码。

HTML 里 &amp; 和 &#39; 有什么区别?

两者都是 HTML 实体,效果完全等价,只是写法不同:&amp; 是具名实体,&#39; 是十进制数字实体(&#x27; 是它的十六进制写法)。具名实体更好记、可读性更强;数字实体则不受实体名列表限制,任何字符都能表示。实际做转义时,最常用的五个是 &(&amp;)、<(&lt;)、>(&gt;)、双引号(&quot;)、单引号(&#39;),顺序上必须先处理 &,否则会把其它实体里的 & 重复转义。

内容标识:本页内容由人工智能辅助生成,并经人工核对与编辑。详见 人工智能生成内容标识说明。
内容说明:本页速查数据由本站自行整理,事实性内容以对应官方规范与文档为准,未复制第三方速查表或百科的表述。数据最后核对日期:2026-10-05。若发现错误或已更新的标准,欢迎通过页脚反馈入口告知。