如何把 Base58 转换为 Base64
- 把 Base58 字符串粘贴到 输入 · Base58 中。换行和空格会被忽略。
- 如果它使用的不是比特币字母表,请把输入下方的 字母表 改为 Flickr 或 Ripple。
- 在 输出 · Base64 中读取 Base64。在输出下方取消勾选 填充(=) 可得到不带填充的 Base64,或者把 换行 设为 64 或 76 列。
- 点击 复制输出;也可以在方向切换中使用 Base64 → Base58 进行反向转换,Base64 转 Base58 页面默认就是这个方向。
工具下方的计数器会显示输入长度、解码后的 字节 数和输出长度。字节数是检查你是否粘贴了完整密钥的最快方法:Solana 公钥为 32,签名或密钥对为 64,IPFS CIDv0 为 34。
示例
| Base58 | Base64 | 字节 |
|---|---|---|
9Ajdvzr | SGVsbG8= | 5,文本 Hello |
11111111111111111111111111111111 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= | 32 个零字节 |
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA | Bt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKk= | 32,Solana SPL Token 程序 |
QmQudp5N7EzTxrBk3yESEKyEroMYNd7R22G2KWffwNZyzq | EiAmKoa2duWGnt1dGt+P/QHWKcMVS/3q7PyM+g2Q4Igtig== | 34,IPFS CIDv0 |
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa | AGLpB7FcvyfVQlOZ6/bw+1DruI8Ywpt9kw== | 25,带校验和的比特币地址 |
每个 CIDv0 转换为 Base64 后都以 EiA 开头:这就是 multihash 头部 12 20(SHA-256,32 字节)。去掉前两个字节,就得到了纯摘要,也就是 SHA-256 工具输出的形式。
为什么 Solana 数据会同时以两种编码出现
在钱包和区块浏览器中,Solana 用 Base58 显示公钥、程序 ID 和交易签名。而它的 JSON-RPC API 接受 Base64 或 Base58 格式的序列化交易,并把 Base58 标记为速度较慢、已弃用的选项。当你请求 Base64 编码时,账户数据也会以 Base64 返回。所以同一个 32 字节的密钥,可能在一处以 Base58 出现,在另一处则包含在 Base64 中。
转换不会改变字节,因此可以放心地用它来比较两个值:如果一个 Base58 密钥和一个 Base64 密钥在这里得到相同的 Base64,它们就是同一个密钥。
用 Python 把 Base58 转换为 Base64
标准库有 Base64 但没有 Base58,所以前半部分是一个简短的循环:
import base64
ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
def base58_to_base64(s: str) -> str:
n = 0
for ch in s:
n = n * 58 + ALPHABET.index(ch)
body = n.to_bytes((n.bit_length() + 7) // 8, "big")
zeros = len(s) - len(s.lstrip("1"))
return base64.b64encode(b"\0" * zeros + body).decode()
base58_to_base64("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA")
# 'Bt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKk='
遇到 0 或 l 等 Base58 以外的字符时,ALPHABET.index 会抛出 ValueError。更多 Python 中的 Base64 处理见 Python 页面。
常见问题
- 字节数少了一个。你之前用的转换器丢掉了一个前导零字节。本页会保留它们;可以对比两者的输出。
- 在
0、O、I或l处报错。这些字符不属于 Base58。请检查是否有复制或 OCR 识别错误。 - 输入以
bc1、0x或bafy开头。它们分别是 Bech32、hex 和 Base32(IPFS CIDv1),都不是 Base58。对于 CIDv1,Base32 解码器说明了如何读取。 - 输出比预期多 4 个字节。这个字符串是 Base58Check,校验和仍然附在后面。
常见问题
如何把 Solana 公钥转换为 Base64?
把地址粘贴到输入框中即可。有效的 Solana 公钥解码后恰好是 32 个字节,所以 Base64 输出总是 44 个字符并以一个 = 结尾,不带填充时为 43 个字符。
为什么 Base64 以 A 开头?
Base58 输入以 1 开头,它解码为一个零字节。Base64 的第一个字符取自前 6 个比特,而六个零比特就是 A。所以比特币地址 1A1zP1… 会变成 AGLp…。
怎样得到 URL 安全的 Base64?
把结果复制到 Base64 转 Base64URL,它会把 + 和 / 换成 - 和 _,并去掉填充。如果只需要去掉 =,在这里取消勾选 填充(=) 即可。
Base58Check 字符串的输出会不同吗?
转换方式相同,但得到的 Base64 会包含版本字节和 4 字节校验和。如果只需要载荷,请先用 Base58Check 工具解码。