Base58

Base58 是一种二进制编码方法,类似于 Base64。Base64 本质是六十四进制,所以能轻易编码二进制内容,符号有 0~9、A~Z、a~z、+ 和 /。(还有 = 作为填充字符)

Base58 移除了 Base64 中的 0、O、I 和 l,这些容易看错的字符,并且移除了 + 与 / 符号。对此,Base58 的创造者:中本聪在程序 base58.h 的注释中给出了原因。

1. 阻止潜在的同形异意攻击(Homoglyph Attack)。
2. 纯数字内容不容易被接受。
3. 防止换行。(指移除 + 与 / 符号,因为这些符号可能会导致电子邮件、网页的排版自动换行。)
4. 能够双击全选。(与上面相同,都与软件的排版有关。)

这么看来,中本聪为比特币设计的 Base58 编码,或者字符集合确实有许多优点。之后的确有人使用了 Base58 编码或来方便用户(比特币领域之外),比如 Flickr 的短链接服务,哔哩哔哩的 BV 号。不过他们都调整了编码集合的顺序,也许需要称作 flickr-Base58 与 bilibili-Base58,属于变体。

Base58 很适合作为 CD-Key 的字符集,因为竖线只有 1,碍事的 I 和 l 都不在。圆圈只有 o,很好分辨。但是常见的 CD-Key 没有这么做,比如 Windows 激活码的字符集是缺少了 015AEIOULNSZ 的 0~9、A~Z 。Steam CD-Key 的字符集是缺少了 1OSU 的 0~9、A~Z。感觉都不太合理。

附言:上述 Base58 的字符集:

btc: 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
flic:123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ
bili:fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF


#杂谈
 
 
Back to Top