十六进制转 Base58

粘贴十六进制字节,即可得到比特币、Solana 和 IPFS 使用的 Base58 字符串。开头的每个 00 字节都会变成一个 1,其余字节原样保留。

完全在浏览器中运行,不会上传任何数据。

使用方法

  1. 把十六进制字节粘贴到输入框中,可以包含空格、冒号或 0x 前缀。
  2. 在输出中查看 Base58 结果。
  3. 复制结果,或点击“交换”把 Base58 解码回十六进制。

十六进制如何转换成 Base58

十六进制数字先按每两位一个字节转换成字节,所以输入的位数必须是偶数。随后,这些字节被当作一个大端序的大数,用比特币字母表改写成 58 进制。开头的每个 00 字节都写成一个 1,所以 0000ff 会变成 115Q,而单独的 ff 是 5Q。

Base58 每个字节约需 1.37 个字符,64 位十六进制数字(32 字节)会缩短到 43 或 44 个字符。它的字母表中没有 0、O、I、l、+ 和 /,结果便于朗读,双击即可整段选中,也能直接放进 URL。所有计算都在浏览器中完成。

生成 Solana 和 IPFS 标识符

  • Solana:地址就是 32 字节 Ed25519 公钥的 Base58 形式,没有前缀,也没有校验和。粘贴 64 位十六进制公钥即可得到地址。
  • IPFS CIDv0:CIDv0 是 sha2-256 多重哈希的 Base58 形式。在 64 位摘要前面加上 1220,就会得到一个以 Qm 开头、长 46 个字符的字符串。注意,这里的摘要必须是 IPFS 对编码后数据块计算的哈希,与原始文件的 SHA-256 并不相同。
1220 9d6c2be50f706953479ab9df2ce3edca90b68053c00b3004b7f0accbe1e8eedf
QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG

比特币地址需要校验和

单独的 hash160 并不是地址。传统比特币地址是对“版本字节 00 + 20 字节 hash160”做 Base58Check 编码的结果,编码前会追加 4 字节的双重 SHA-256 校验和。如果直接用普通 Base58 编码 00 和 hash160,得到的字符串更短、没有校验和,钱包会拒绝它。

请改用 Base58Check 页面:把输入切换为十六进制,输入 00 加 hash160,校验和会自动添加。如果你的十六进制末尾已经带有正确的校验和,本页会得到同样的地址。

0062e907b15cbf27d5425399ebf6f0fb50ebb88f18    (Base58Check)
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa

在代码中把十六进制转成 Base58

# Python (pip install base58)
import base58
base58.b58encode(bytes.fromhex('0000ff'))     # b'115Q'

// JavaScript (npm install bs58)
import bs58 from 'bs58';
bs58.encode(Buffer.from('0000ff', 'hex'));    // '115Q'

常见问题

如何把 hash160 转换成比特币地址?
在前面加上版本字节 00,然后用 Base58Check 编码,而不是普通 Base58。在 Base58Check 页面以十六进制输入字节即可完成。
为什么结果开头有好几个 1?

因为你的十六进制开头有同样数量的 00 字节。Base58 把它们保留为前导的 1,解码时就能原样还原。

为什么我的十六进制输入报错?

十六进制必须是偶数位,并且只能包含 0-9 和 a-f(大小写均可)。空格、冒号和 0x 前缀会被自动去掉;其他字符,例如误输入的字母 g,或者少了一位数字,都会报错。

本页使用哪套 Base58 字母表?
比特币字母表,Solana、IPFS 和大多数项目用的也是它。如果需要 Flickr 或 Ripple 字母表,请到 Base58 页面选择对应字母表,并以十六进制字节作为输入。