如何在任意两种编码之间转换
- 把字符串粘贴到输入框。从 设为 自动检测 时,状态行会显示工具判断的格式:“检测到:Base58 · 不对?改按以下格式读取 [Base64] …”。
- 如果猜错了,点击其中一个 改按以下格式读取 按钮,或者自己设置 从。
- 在 到 中选择目标格式。格式分为几组:文本、Base64、字节与数字、Base32、大数进制、Base85/Base91/Base45,以及电子邮件、URL 与传统格式。
- 各格式的选项显示在对应窗格下方,例如 Base58 和 Base62 的 字母表,或 Base32 和 Base64 的 填充(=)。
- ⇄ 互换 把输出移到输入,并对调两种格式。复制输出 和 下载 用于获取结果,保存字节 会把解码后的字节下载为文件。
每次转换都要经过原始字节:先解码输入,再把字节重新编码。工具下方的 字节 计数器显示字节数,这往往是确认密钥或哈希是否完整的最快方法。上面列出的各个专用页面打开的也是这个转换器,只是预设了格式。
各种编码对比
| 编码 | 字母表 | 输出大小 | 额外开销 | 典型用途 |
|---|---|---|---|---|
| Hex / Base16 | 16 | 每字节 2 个字符 | 100% | 哈希、调试、字节转储 |
| Base32 | 32 | 每 5 字节 8 个字符 | 60% | TOTP 密钥、onion 地址、不区分大小写的 ID |
| Base36 | 36 | 每字节约 1.55 个字符 | ≈ 55% | 不区分大小写的短 ID 和数字 |
| Base45 | 45 | 每 2 字节 3 个字符 | 50% | 二维码(欧盟健康证书) |
| Base58 | 58 | 每字节约 1.37 个字符 | ≈ 37% | 比特币、Solana、IPFS |
| Base62 | 62 | 每字节约 1.34 个字符 | ≈ 34% | 短链接和 ID |
| Base64 | 64 | 每 3 字节 4 个字符 | 33% | 电子邮件、JSON、data URI、JWT,几乎无处不在 |
| Ascii85 / Z85 | 85 | 每 4 字节 5 个字符 | 25% | PDF、PostScript、Git、ZeroMQ 密钥 |
| basE91 | 91 | 每字节约 1.23 个字符 | 14–23% | 把数据塞进可打印 ASCII |
| Uuencode / xxencode | 64 | 每 3 字节 4 个字符,另加行格式 | ≈ 38% | 早期电子邮件和 Usenet 附件 |
额外开销按随机数据计算;对于大数进制,它会随数值相差一两个字符。Base45 在这里看起来很浪费,但在二维码的字母数字模式下,它的 45 个字符每个只占 5.5 个比特,开销因此接近 3%。
以同一个输入为例,下面是 5 字节字符串 Hello 在各编码中的结果:
| Hex | Base32 | Base36 | Base45 | Base58 | Base62 | Base64 | Ascii85 | basE91 |
|---|---|---|---|---|---|---|---|---|
48656c6c6f | JBSWY3DP | 3yud78mn | %69 VDL2 | 9Ajdvzr | 5TP3P3v | SGVsbG8= | 87cURDZ | >OwJh>A |
构造进制编码的三种方式
这些编码可以分为三类,类别能解释它们的大部分行为。
比特分组:hex、Base32、Base64、uuencode 和 xxencode。字母表大小是 2 的幂,所以每个字符承载固定数量的比特(4、5 或 6 个)。编码速度快,可以流式处理,输出长度只取决于输入长度。
固定块:Base45(2 个字节变 3 个字符)和 Base85 家族(4 个字节变 5 个字符)。字母表大小不是 2 的幂,所以把一个小块当作一个数来转换。同样速度快、可流式处理,长度也由输入大小决定。
大数:Base36、Base58 和 Base62。整个输入就是一个数,用新的进制写出来。任何字母表大小都可以,输出也没有填充,但每个字节都会影响每个字符,开头的零字节需要特殊处理,而且计算量随大小的平方增长。本转换器把开头的零字节保留为开头的零位,并把这几种进制的输入上限设为 64 KB。
basE91 介于这几类之间:它每次读取 13 或 14 个比特,所以长度会因内容不同而略有变化。
该选哪种编码
- 程序与程序之间通信:用 Base64,在 URL 和令牌中用 Base64URL。每种语言都内置了它,没有其他编码比它更通用。
- 需要人来阅读、输入或口述:用 Base32(最好是 Crockford 变体)或 Base36。两者都不区分大小写;Crockford 还避开了外形相似的字母。
- URL 中的短不透明 ID:要最短的纯字母数字字符串用 Base62;如果可能需要手抄,用 Base58,因为它去掉了
0、O、I和l。 - 二维码:Base45 配合二维码的字母数字模式。
- 每个字节都很重要,且通道只支持纯 ASCII:要固定块就用 Ascii85 或 Z85,想再省几个百分点就用 basE91。
- 查看字节:hex。体积翻倍,但每个字节都是两个可以直接读懂的字符。
- 传统系统要求使用:uuencode 或 xxencode,新项目不要用。
hex、Base32、Base58 和 Base85 的对比 更深入地分析了它们与 Base64 之间的取舍。
常见问题
表示二进制数据最紧凑的文本编码是哪种?
在常见编码中,basE91 最紧凑(随机数据的额外开销约 23%),其次是 Base85 家族(25%),然后是 Base64(33%)。更紧凑的编码会用到在 JSON、HTML 或 shell 中需要转义的标点符号,所以综合来看 Base64 往往更划算。
URL 中最适合用哪种编码?
机器生成的令牌用 Base64URL,它短小且有标准。如果值只能包含字母和数字,用 Base62 或 Base58;如果必须经得起大小写转换,用 Base32 或 Base36。Base45 和 Base85 含有需要百分号编码的字符。
为什么 Base58、Base62 和 Base36 的输出长度不固定?
它们把输入当作一个大数处理,所以长度既取决于字节数,也取决于数值本身。Base64、Base32 和 hex 映射的是固定的比特分组,相同字节数的输入总是得到相同长度的输出。
自动检测是怎么判断字符串格式的?
它按照各格式的规则逐一检验输入,从特征最明显的(例如 <~ 或 begin 644 这类定界符)到最通用的,并用第一个匹配的格式解码。短字符串可能同时符合好几种格式;可以用“改按以下格式读取”按钮选择另一种解读方式。
这些编码能保护数据吗?
不能。任何人不需要密钥就能把它们还原。它们只是让字节变得可打印。参见 编码与加密的区别。