Base58 编解码
用比特币那套 58 个字符的字母表做编解码,去掉 0、O、I、l,长数字用 BigInt 精确处理。
字母表和算法
Base58 的字母表是 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz,一共 58 个字符。它是在 Base62(大小写字母加数字)的基础上去掉了 0(和 O 混)、O(和 0 混)、I(和 l、1 混)、l(和 I、1 混)这四个字符,剩下的即使在手写体或小字号下也不容易认错,所以比特币地址、短链和激活码都爱用它。
算法本身是把整串字节当作一个 256 进制的大整数,不断除以 58 取余数,余数查表得到字符。因为结果依赖整个数字而不是分段,所以它不是按字节独立编码的:改一个字节,后面几乎所有字符都会变。本工具编码时按字节做进位,解码时用 BigInt 累加大整数,因此几十字节的比特币地址也能精确处理,不会因为超过 JavaScript 的 Number.MAX_SAFE_INTEGER 而丢精度。
前导的 0 字节在数值上没有意义,Base58 约定把它们直接写成字符 1。字节 00 01 编码出来是 12,其中第一个 1 代表那个 0 字节,第二个 2 代表数值 1。反过来解码时,开头的每个 1 都会还原成一个 0x00 字节,所以 Base58 可以完整保留前导零。
和比特币地址、短链的关系
常见的比特币地址(以 1 或 3 开头)不是裸的 Base58,而是 Base58Check:在原始数据(版本号 + 公钥哈希)后面再接 4 个字节的双重 SHA-256 校验和,整段再做 Base58。校验和能挡住抄错一两个字符的情况,所以本工具解出来的十六进制会比你预期的多 4 个字节。它只做纯 Base58,不会帮你校验或生成这个校验和;要验证地址请用专门的校验工具。
短链服务(如 bit.ly 的旧短码)和邀请码常把自增 ID 或随机字节做 Base58,目的是让码更短、又不像 Base64 那样带 +、/、= 这些在 URL 里要转义的字符。本工具对文本走 UTF-8,对二进制走「十六进制字节」模式,两种入口都支持,输出结果可以一键复制。所有计算都在浏览器本地完成,不会上传任何数据。