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),用来做测试数据。这些地址没有任何人持有私钥,所以只能当测试数据用
使用方法
- 选择方向:编码、解码,或「生成比特币地址」
- 编码 / 解码要选择编码方式(Base58 有两种字母表,别选错)
- 把内容粘贴进输入框,结果实时出现
- 点「复制」取走结果
常见问题
- 为什么 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),不含助记词或私钥 —— 它是地址,不是钱包。
相关工具
Base64 编解码
编码把文本转成 Base64,或把 Base64 还原成文本,中文与 emoji 都按 UTF-8 正确处理。全部在浏览器本地完成,内容不上传。
Base32 编解码
编码在文本与 Base32 之间双向转换,支持标准字母表与 base32hex 两种变体,中文按 UTF-8 字节编码,解码容忍小写与缺失的填充。
哈希计算
编码算出文本的 MD5、SHA-1、SHA-256 或 SHA-512 摘要,也可算老系统用的 MD4 与 MD2,中文按 UTF-8 字节计算。全部在本地完成。
URL 编解码
编码把中文、空格与符号转义成 %XX,或把 %XX 还原成文本;整条 URL 与单独的参数值要选对方式,选错不会报错,但链接会打不开。全部在浏览器本地完成。
HTML 实体编解码
编码把 < > & 与引号转成 HTML 实体,也能把实体还原成字符,而且只解一遍:&lt; 得到的是 < 而不是尖括号。全部在浏览器本地完成。
JWT 解析与验签
编码把 JWT 拆成 header、payload、signature,支持用密钥验证 HS256/384/512 签名,并把 exp、nbf 换算成可读时间。全部在浏览器本地完成。