使用方法
- 选择“编码”把文本转换为 z-base-32,或选择“解码”把 z-base-32 还原为文本。
- 保持选择 z-base-32 变体,并确认“填充”已关闭,因为这种格式不使用填充。
- 输入或粘贴内容,也可以打开文件,结果会随输入实时更新。
- 复制结果,或将结果下载为文件。
什么是 z-base-32?
z-base-32 是 Zooko Wilcox-O'Hearn 设计的一种 Base32 编码,目标是让人更容易阅读、书写和口述。它的原理与 RFC 4648 Base32 相同:每个字符承载 5 位,5 个字节变成 8 个字符。真正的区别在于字母表:
ybndrfg8ejkmcpqxot1uwisza345h769
它全部使用小写,并去掉了 0、2、l 和 v,因为它们容易与 o、z、1 和 u 混淆。字符的顺序也经过重新排列,所以同样的字节编码成 z-base-32 后与标准 Base32 完全不同,也无法用 RFC 4648 解码器读取。
z-base-32 不使用填充,数据长度由字符串长度推算。规范还允许在双方约定长度的前提下编码不足整字节的位串,而本工具始终按整字节处理。
z-base-32 的应用
- OpenPGP Web Key Directory(WKD)。为了在固定网址发布公钥,邮箱地址的本地部分会先转为小写再计算 SHA-1,20 字节的哈希值经 z-base-32 编码后成为 32 个字符的文件名。
- ZRTP。通话双方为识别中间人攻击而朗读核对的短认证字符串(SAS),可以用 z-base-32 字母表以 Base32 形式呈现(RFC 6189)。
- 闪电网络。lnd、Core Lightning 等节点软件以 z-base-32 字符串返回消息签名。
其他便于人工使用的编码还有 Crockford Base32(数字顺序不变,解码可容错)和 Base58(更短,但区分大小写),可以对比选择。
编码规格
| 字母表 | ybndrfg8ejkmcpqxot1uwisza345h769 |
|---|---|
| 输出体积 | 每 5 字节输出 8 个字符(160%) |
| 填充 | 无 |
| 标准 | z-base-32(Zooko Wilcox-O'Hearn) |
| 区分大小写 | 否 |
编码示例
| 输入 (UTF-8) | 输出 |
|---|---|
Hello, World! | jb1sa5dxfoofq551pt1nn |
Base64.is | ejozg3jsgozg1ha |
你好 | h164b3pfzw |
常见问题
z-base-32 和 Base32 一样吗?
不一样。它与 RFC 4648 Base32 一样按 5 位分组,但字母表不同且顺序重排,也不使用填充。z-base-32 字符串必须用 z-base-32 解码器解码。
z-base-32 区分大小写吗?
字母表是小写的,输出也始终是小写。本工具解码时同样接受大写输入,会先转换为小写再解码。
字符串末尾带有等号怎么办?
z-base-32 本身不使用填充,但如果字符串末尾有等号,解码器会直接忽略。
如何得到 WKD 哈希?
WKD 需要对邮箱地址本地部分的小写形式计算 SHA-1,本工具不负责计算哈希。请在其他地方算出哈希值,以十六进制形式粘贴到这里再编码。GnuPG 也可以通过
--with-wkd-hash 选项直接显示 WKD 哈希。