piapia123
zh

Base58 / Base62 / Base100 编码与解码

编码

所有处理都在浏览器本地完成,数据不上传服务器

输入
把文件拖到这里可直接载入
输出

三种「不用易混字符」的编码,各有各的场合。Base58 是比特币的地址编码 —— 它去掉了 0、O、I、l 四个字符,理由很实际:钱包地址是要人对着屏幕核对的,而 0 与 O、l 与 I 在多数字体里几乎一样,一个字母看错就是一笔找不回来的转账。Base62 用满数字与大小写字母,同样长度能表示更多内容,短链接服务大多用它。Base100 是把每个字节映射成一个 emoji 的写法(名字里的 100 是 💯 那个梗),编码后体积膨胀约 3 倍,唯一的用途是让数据「看起来像表情」,绕过某些只检查可打印字符的场合。三种都在浏览器本地完成,输入的内容不会被上传。

功能

  • 四种编码方式:Base58(比特币)、Base58(Flickr)、Base62、Base100
  • 两套 Base58 字母表可选 —— 它们互不兼容,同一份数据编出来完全不同
  • Base100 按 stek29 规范实现:每个字节对应一个 U+1F3F7–U+1F4F6 的 emoji
  • 中文与 emoji 按 UTF-8 字节处理,与比特币钱包等实现一致
  • 正确处理前导零字节 —— 比特币地址的版本字节就是 0x00,丢了它地址就变了
  • 算法之外的字符会指名报错,不会静默丢弃
  • ⚠️ 还能生成一批格式正确的比特币地址(主网 / 测试网,P2PKH / P2SH),用来做测试数据。这些地址没有任何人持有私钥,所以只能当测试数据用

使用方法

  1. 选择方向:编码、解码,或「生成比特币地址」
  2. 编码 / 解码要选择编码方式(Base58 有两种字母表,别选错)
  3. 把内容粘贴进输入框,结果实时出现
  4. 点「复制」取走结果

常见问题

为什么 Base58 要去掉 0、O、I、l 这四个字符?
因为它的目标用户是「正在对着屏幕核对地址的人」。0 与 O、l 与 I 在等宽字体里都难以分辨,而在比特币地址里看错一个字符,钱就转到一个不存在或不属于你的地址上,且无法撤销。少四个字符的代价是编码长了约 3%,换来的是一整类人为错误被消灭。这也是为什么比特币地址里从来不会出现这两个数字和这两个字母。
比特币与 Flickr 的 Base58 字母表有什么差别?
只差大小写字母的先后顺序:比特币把大写放在前面(123456789ABC…abc…),Flickr 反过来(123456789abc…ABC…)。两张表都不含 0、O、I、l。它们互不兼容 —— 同一串字符用错了表,解出来是完全不同的字节,而且不会报错。用之前先确认对方的实现用的是哪一张。
Base100 是什么?为什么结果变长了?
Base100 把每个字节映射成一个固定的 emoji(第 n 个字节对应码点 U+1F3F7 + n),是一个字节对一个字符的定长编码,不做进制转换。所以体积必然膨胀:一个字节在 UTF-8 里占 3–4 字节,编码后还要再多出 emoji 本身的字节数。它的用途不是压缩也不是加密,而是让数据在只认「可打印字符」的过滤面前变成一串表情符号。
解码时提示「不是合法的 UTF-8 文本」?
说明这段编码承载的是二进制而不是文字。Base58 最常见的用途就是编码二进制数据 —— 比特币地址里装的是版本号、公钥哈希和校验和,本来就不是给人读的文本。本工具的输出是文本框,没法展示二进制,所以会明确报错而不是给你一串乱码。
为什么解码一段以「1」开头的 Base58 会多出字节?
Base58 是「大整数」表示,而大整数表示法天然会把开头的 0x00 吃掉 —— `[0x00, 0x41]` 与 `[0x41]` 的数值完全相同。为了能正确还原,约定是开头的每个 0x00 字节各写成一个字母表首字符(Bitcoin 表里就是「1」)。所以开头的每个「1」都代表一个真实的 0x00 字节,不是填充。比特币地址正是靠这个机制保住了它的版本字节。
生成出来的比特币地址能收款吗?
不能,而且这一点必须说清楚:往这些地址转币等于把钱烧掉,谁都取不回来。 一个真实的比特币地址是「公钥的 HASH160」,而这里直接用 20 个随机字节当作 HASH160 —— 分布在统计意义上与真地址无异,但对应的私钥从来就没有被生成过,也没有任何人持有它。所以它只有一个用途:造测试数据。演示、截图、写文档、跑测试时需要一串格式正确的地址,用别人的真地址会把第三方的收款地址公开出去,而这个功能给出的地址是随机且无人持有的。它也不会出现在区块链上 —— 只是格式合法的字符串。
为什么没有 SegWit 的 bc1 地址?
因为 bech32 不是 Base58。`bc1q…` 用的是完全另一套算法:不同的字母表(32 个字符,且全小写)、不同的校验和(BCH 码,能纠正最多 4 个字符的抄写错误,而 Base58Check 的校验和只能发现错误、不能纠正)。把它塞进 Base58 这几个变体里会让人以为编码方式可以随便换 —— 实际上换一个字表得到的是完全不同的东西。需要 SegWit 地址请用专门的 bech32 工具。另外,本页生成的是 Base58Check 地址(P2PKH / P2SH),不含助记词或私钥 —— 它是地址,不是钱包。

相关工具