上传文件
  1. base64hub
  2. 其他进制编码
  3. Base58Check

Base58Check 编码与解码

以 hex 形式粘贴版本字节加载荷,得到附带 4 字节校验和的 Base58Check 字符串。反转方向即可解码地址或 WIF 密钥:校验和会被验证,载荷以 hex 形式返回。

免费 无需注册,不限次数 本地 不上传任何内容 校验和 解码时自动验证 更新于 2026年10月27日
输入 0字节 0 B输出 0

在你的浏览器中处理。此页面无法将你的数据发送到任何地方: 我们如何确认

如何编码和解码 Base58Check

编码:

  1. 把 hex 粘贴到 输入 · Hex 中:先是版本字节,然后是载荷。空格、冒号和 0x 前缀都可以接受。
  2. 在 输出 · Base58Check 中查看结果。工具会计算校验和,并在编码前把它追加到末尾。
  3. 对于比特币及大多数分叉币,字母表 保持 Bitcoin 即可。

解码时,在方向切换中点击 Base58Check → Hex,然后粘贴地址或密钥。解码器会转换它、重新计算校验和,只有 4 个校验和字节全部匹配时才返回载荷(仍以版本字节开头)。哪怕输错一个字符,也会提示“校验和不匹配:字符串输错了或已损坏。”

Base58Check 在 Base58 基础上增加了什么

普通的 Base58 没有任何错误检测:输错一个字符会得到另一个同样有效的字符串。Base58Check 通过两项补充解决了这个问题:

version (1 byte) | payload | first 4 bytes of SHA-256(SHA-256(version | payload))

然后对整体做 Base58 编码,所以前导零字节会变成 1。版本字节决定网络和数据类型,而且由于它位于数字的最前面,它也决定了结果的第一个字符。

版本字节与前缀

同一个 20 字节哈希 62e907b15cbf27d5425399ebf6f0fb50ebb88f18 搭配不同的版本字节:

版本含义首字符结果
00比特币 P2PKH 地址11A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
05比特币 P2SH 地址33Ai1JZ8pdJb2ksieUV8FsxSNVJCpoPi8W6
6f测试网 P2PKH 地址m 或 nmpXwg4jMtRhuSpVq4xS3HFHmCmWp9NyGKt
c4测试网 P2SH 地址22N2GDNJ4rEm6NxfMC9ck8VuRdheQzXWaNZv

第一行是接收比特币创世区块奖励的地址。其他几行只是为了演示版本字节:把公钥哈希套上 P2SH 版本字节并不能得到可用的 P2SH 地址,因为 P2SH 哈希的是脚本。

WIF 私钥

钱包导入格式(WIF)是版本字节为 80、载荷为 32 字节私钥的 Base58Check。末尾多一个 01 字节,表示该密钥的公钥以压缩形式使用。以比特币 wiki 上广为人知的示例密钥为例:

Hex 输入Base58Check
80 + 0C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ
同上 + 01KwdMAjGmerYanjeui5SHS7JkmpZvVipYvB2LJGU1ZxJwYvP98617

未压缩的 WIF 密钥以 5 开头,压缩的以 K 或 L 开头。这个示例密钥是公开的,绝不要用它存放真实资金。

在 Python 中使用 Base58Check

校验和只需调用两次标准库中的 SHA-256。配合一个小型 Base58 编码器:

import hashlib

ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"

def b58encode(data: bytes) -> str:
    n = int.from_bytes(data, "big")
    out = ""
    while n:
        n, r = divmod(n, 58)
        out = ALPHABET[r] + out
    zeros = len(data) - len(data.lstrip(b"\0"))
    return "1" * zeros + out

def b58check(payload: bytes) -> str:
    checksum = hashlib.sha256(hashlib.sha256(payload).digest()).digest()[:4]
    return b58encode(payload + checksum)

b58check(bytes.fromhex("0062e907b15cbf27d5425399ebf6f0fb50ebb88f18"))
# '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa'

要在代码中验证一个字符串,先用 Base58 解码,拆出最后 4 个字节,再与其余部分的双重哈希比较。更多 Python 字节处理见 Python 页面。

常见问题

  • 校验和不匹配。字符串有输入错误、被截断了,或者是不带校验和的普通 Base58(Solana 地址和 IPFS 哈希都是普通 Base58,请用 Base58 解码器处理它们)。
  • “太短,无法包含 4 字节校验和”。解码后的值不足 4 个字节,所以不可能是 Base58Check。
  • 意外字符 "0"、"O"、"I" 或 "l"。它们不在 Base58 字母表中;请检查抄写是否有误。
  • 编码后首字符不对。检查版本字节。没有版本字节时,20 字节的哈希通常会编码成不以 1 开头的字符串。

常见问题

Base58Check 的校验和是怎么计算的?

对载荷(包括版本字节)做 SHA-256,再对结果做一次 SHA-256,取前 4 个字节。这 4 个字节在 Base58 编码之前追加到载荷后面。

校验和有效,是否意味着可以放心向这个地址转账?

它只说明字符串没有输错:随机的输入错误能通过校验的概率约为 43 亿分之一。它无法说明这个地址由谁控制,也无法说明它是否属于你以为的那个网络。

Base58Check 能解码 bc1 地址吗?

不能。以 bc1 开头的地址是 Bech32 或 Bech32m(SegWit 和 Taproot),使用不同的字母表和不同的校验和。

可以在这里粘贴真实的私钥吗?

转换在你的浏览器中运行,页面也会阻止除 Cloudflare 的浏览量统计以外的所有网络请求,但 WIF 密钥掌控着资金。对于任何有价值的东西,请使用测试密钥,或者在离线电脑上操作。