语言:简体中文

tools / base58

base58/

文本或 hex 与 Base58 互转,用比特币字母表。开头的 00 字节对应开头的 1。

原文

Base58

常见问题

Base58 为什么没有 0 O I l,解码提示「不在 Base58 字母表里」怎么办

Base58 特意去掉了数字 0、大写字母 O、大写字母 I 和小写字母 l,这几个字符手写或肉眼看很容易混,剩下 58 个字符:1 到 9、大写 A 到 Z(没有 I 和 O)、小写 a 到 z(没有 l)。解码遇到字母表以外的字符,会指出是第几个字符、是什么字符。先检查复制时有没有混进引号、标点或不可见字符;空格和换行会自动忽略。如果这串东西里本来就有 0、O、I、l,它多半不是 Base58,而是 Base64、hex 或别的编码。

Base58 解码后提示「不是有效的 UTF-8 文本」怎么办

说明解出来的字节不是 UTF-8 文字,私钥、公钥哈希、地址这类数据本来就是二进制。把「输出格式」改成 hex,就能看到原始字节。文本编码一律按 UTF-8,用 GBK 等其他编码写出来的字节在这里读不成文字,需要用支持该编码的工具转换。

Base58 结果开头的 1 是什么意思,hex 开头的 00 为什么变成 1

Base58 把整串字节当成一个大整数来换底,开头的 00 字节在数值上等于没有,会丢失,所以约定每个开头的 00 字节写成一个开头的 1(字母表的第 0 位)。比如 hex 0000010203 的结果是 11Ldp,开头两个 1 对应两个 00。解码时开头有几个 1,就还原出几个 00 字节;全是 00 的输入则只剩下一串 1。

能解码比特币地址吗,Base58Check 的校验和呢

能解出字节,但不会校验。比特币地址用的是 Base58Check:版本字节、数据、4 字节校验和连在一起再做 Base58。本工具只做普通 Base58,解码会得到完整的原始字节,不会检查也不会去掉校验和,编码时也不会替你加。例如 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa 解码(输出选 hex)是 25 字节:1 字节版本 00、20 字节哈希、最后 4 字节是校验和。

Base58 和 Base64 有什么区别

Base64 用 64 个字符(含 + 和 /,末尾可能有 =),3 字节一组转换,速度快、长度可预测。Base58 去掉了容易看混的字符以及 + / =,双击能整串选中,手抄不容易出错,代价是要把整串数据当大整数做除法,越长越慢,所以多用在地址、密钥这类几十字节的短数据上。两种结果不能互相替代。

为什么编码结果和别的网站或代码库不一样

先看三点。字母表:本工具用比特币字母表,Flickr 的字母表是小写在前,Ripple 的顺序又不同,结果当然不一样。输入内容:文本按 UTF-8 原样编码,末尾多一个换行或空格结果就不同。输入格式:要编码的是 hex 字节就得选 hex,否则 0a1b 会被当成四个字符的文本。hex 输入可以带空格、冒号、逗号分隔或 0x 前缀,位数必须是偶数。

Base58 输入有长度限制吗

有。编码最多 32768 字节,解码最多 45000 个字符,超过会提示分段处理。Base58 的计算量随长度平方增长,设上限是为了不卡住页面;几 KB 以内基本是瞬间出结果。

输入的内容会上传吗

不会。编码和解码都在浏览器里完成,不会发到服务器。