Base58
Base58 是一种把二进制数据转成可读文本的编码方式,最早由中本聪为比特币地址设计。它可以看作 Base64 的"精简版":在字母和数字里去掉了 6 个容易看错的字符——数字 0、大写 O、大写 I、小写 l,以及 + 和 /,剩下 58 个字符。这样人工抄写、复制粘贴或口头传达时更不容易出错。
它的原理不像 Base64 那样按固定比特分组,而是把整段字节当作一个大整数,不断对 58 取余、除以 58,得到每一位对应的字符。因此它没有填充符(padding),输出长度也不是整齐的比例(约为原始字节的 1.37 倍);开头的零字节会被特殊处理成前导的 1 以保留信息。
使用时要分清两个概念:
- 纯 Base58:只做字符映射,不带任何校验。
- Base58Check:比特币地址、WIF 私钥用的其实是它——在数据前加版本字节,末尾附 4 字节校验和(两次 SHA-256),再做 Base58,能检测抄错。
另外,字母表并不唯一,比特币、Ripple、Flickr 用的字符顺序各不相同,跨系统解码前要先确认是同一套。由于涉及大整数运算,Base58 比 Base64 慢,不适合大文件或流式场景。
常见问题
Base58 和 Base64 有什么区别?
Base58 去掉了 0、O、I、l 以及 +、/ 共 6 个易混淆字符,更适合人工识读和复制。但它基于大整数运算、没有填充符,编码速度比 Base64 慢,输出长度也略长。
Base58 能检测数据抄写错误吗?
纯 Base58 只负责编码,本身没有校验功能。比特币地址用的是 Base58Check,额外附带 4 字节校验和,才能发现抄错或输错的字符。
所有系统的 Base58 字母表都一样吗?
不一样。比特币、Ripple、Flickr、IPFS 各有自己的字符顺序,其中比特币字母表最常见。跨系统解码前一定要确认双方用的是同一套字母表,否则结果会错。