Base32、Base58 与 Ascii85 转换工具
将文本或原始字节编码为 Base32、Base58、Ascii85 或 Z85,或将其中任一编码解码回来,各编码使用其自身的字母表和填充规则。运算表会展示前几个字节如何变为字符。Base64 由文本编码与解码工具涵盖。在浏览器中运行,不上传任何内容。
字母 A–Z 与数字 2–7,每个字符承载五个比特,并以 = 填充至八个字符的倍数。解码时大小写无关。
运算过程
字节被写成比特并切分为五比特一组。每组是 0 到 31 之间的数字,并选出一个字符。
| 比特 | 值 | 字符 |
|---|---|---|
| 01001 | 9 | J |
| 00001 | 1 | B |
| 10010 | 18 | S |
| 10110 | 22 | W |
| 11000 | 24 | Y |
| 11011 | 27 | 3 |
| 00011 | 3 | D |
| 01111 | 15 | P |
| 00101 | 5 | F |
| 10000 | 16 | Q |
| 10000 | 16 | Q |
| 00101 | 5 | F |
| 01110 | 14 | O |
| 11011 | 27 | 3 |
| 11011 | 27 | 3 |
| 10010 | 18 | S |
显示前 16 行。
如何使用 Base 编码转换工具
- 1. 选择编码方式。 Base32、使用扩展十六进制字母表的 Base32、使用比特币字母表的 Base58、Adobe 使用的 Ascii85,或 Z85。菜单下方的说明会描述您所选的编码。
- 2. 说明数据类型。 文本按 UTF-8 字节读取。十六进制字节则允许您编码任意二进制数据,例如密钥,只需将其输入为成对的字符,如
86 4f d2 6f。 - 3. 编码或解码。 编码会生成由该编码字母表组成的文本。解码则将其还原为字节,并以文本或十六进制形式显示。输入中的空格和换行会被忽略。
- 4. 检查选项。 Base32 可选择是否带
=填充。Ascii85 可以用<~和~>包裹,并可将四个零字节写作z。
这些编码的用途
它们都不是加密。每种编码都将可能不可打印的字节转换为可以粘贴到电子邮件、网址、二维码或配置文件中的文本,而任何知道编码名称的人都能将其还原。它们的区别在于所用的字母表,以及结果比数据长多少。
| 编码 | 字符数 | 长度与字节数之比 | Hello, World 变为 |
|---|---|---|---|
| Base32 (RFC 4648) | 32 | 8 ÷ 5 倍长 | JBSWY3DPFQQFO33SNRSA==== |
| Base32 扩展十六进制 | 32 | 8 ÷ 5 倍长 | 91IMOR3F5GG5ERRIDHI0==== |
| Base58 (比特币) | 58 | 约 1.37 倍 | 2NEpo7TZsLBYdvo5V |
| Ascii85 (Adobe) | 85 | 5 ÷ 4 倍长 | <~87cURD_*#4DfTZ)~> |
| Z85 (ZeroMQ) | 85 | 5 ÷ 4 倍长 | nm=QNz.92jz/PV8 |
Base32
Base32 将字节切分为 5 位一组,并把每组写成 32 个字符之一,即 A–Z 与 2–7。它只使用数字 2 至 7,省去了与 O、I、B 相似的 0、1 和 8,并忽略字母大小写,因此便于朗读或输入。填充符 = 将长度补齐为八的倍数。RFC 4648 给出了测试向量,例如 foobar → MZXW6YTBOI======。身份验证应用的密钥和 Tor 洋葱地址都使用 Base32。
Base58
Base58 将整个输入视为一个大整数,并以 58 进制写出,省去了 0、O、I、l 以及符号 + 和 /,使结果可以通过双击完整选中复制,也不易看错。每个前导零字节写作第一个字符 1。比特币字母表只是多种 Base58 字母表之一;Ripple 和 Flickr 使用的字母表对字符的排序不同,因此请确认您的数据使用的是哪一种。比特币地址还会在其上增加校验和与版本字节,这一方案称为 Base58Check,本工具不计算它。
Ascii85 与 Z85
两者都将四个字节读作一个 32 位数字,并写成五个 base-85 数字,因此只比数据长 25%。Adobe 的 Ascii85 用于 PostScript 和 PDF,使用从 ! 到 u 的字符,将四个零字节简写为 z,并通常以 <~ 和 ~> 包裹数据。最后一组为一到三个字节时,输出的字符比字节多一个。Z85 定义于 ZeroMQ 的 RFC 32,使用一套不同的 85 字符字母表,这套字母表的选择是为了避免源代码中的引号和反斜杠;它没有 z 简写,也没有短的末尾组,因此其输入必须是四个字节的整数倍。其规范中的示例是八个字节 86 4f d2 6f b5 59 f7 5b,编码为 HelloWorld。还存在其他 base-85 字母表,例如 Git 所用的 RFC 1924,因此请让字母表与其来源相符。
常见问题
- Base32 或 Base58 是加密吗?
- 不是。它们是编码:任何人都可以将其还原,因为字母表和规则都是公开的。它们的作用是使数据可打印、更便于复制,而不是保密。
- 为什么 Base58 省略了一些字符?
- 为了避免形近字符和符号。它省去了 0(数字零)、O(大写字母 O)、I(大写字母 I)和 l(小写字母 L),这些字符在许多字体中容易混淆;还省去了 + 和 /,它们会破坏双击选中。因此剩下 58 个字符。
- 如何解码 Base32 字符串?
- 选择 Base32,切换到解码,然后粘贴字符串。大小写无关紧要,末尾的 = 符号可有可无。如果出现指出某些字符的错误,字符串很可能是 Base32 扩展十六进制、Base64 或其他编码。
- Ascii85 与 Z85 有何区别?
- 两者都用五个字符表示四个字节,但字母表不同。Ascii85 使用从 ! 到 u 的字符,有 z 简写表示零,并可能以 <~ 和 ~> 包裹。Z85 使用对源代码安全的字母表,且没有简写。
- 为什么 Z85 提示我需要四个字节的整数倍?
- Z85 规范未定义填充。其数据必须是 4 字节组的整数倍,其文本也必须是五个字符的整数倍。请自行补足字节,或使用能处理末尾短组的 Ascii85。
- 如何编码 Base64 字符串?
- 本页不处理 Base64。文本编码与解码工具可以在文本与 Base64、网址及 HTML 实体之间相互转换,而 XOR 密码页面可以将十六进制字节显示为 Base64。