Como converter Base58 em Base64
- Cole a string Base58 em Entrada · Base58. Quebras de linha e espaços são ignorados.
- Se ela não usar o alfabeto do Bitcoin, mude o Alfabeto abaixo da entrada para Flickr ou Ripple.
- Leia o Base64 em Saída · Base64. Abaixo da saída, desmarque Preenchimento (=) para Base64 sem preenchimento, ou ajuste a Quebra de linha em 64 ou 76 colunas.
- Clique em Copiar saída, ou use Base64 → Base58 no seletor de direção para o caminho inverso; a página Base64 para Base58 já começa nele.
Os contadores abaixo da ferramenta mostram o comprimento da entrada, o número de Bytes decodificados e o comprimento da saída. A contagem de bytes é o jeito mais rápido de confirmar que você colou uma chave inteira: 32 para uma chave pública Solana, 64 para uma assinatura ou um par de chaves, 34 para um IPFS CIDv0.
Exemplos
| Base58 | Base64 | Bytes |
|---|---|---|
9Ajdvzr | SGVsbG8= | 5, o texto Hello |
11111111111111111111111111111111 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= | 32 bytes zero |
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA | Bt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKk= | 32, programa SPL Token da Solana |
QmQudp5N7EzTxrBk3yESEKyEroMYNd7R22G2KWffwNZyzq | EiAmKoa2duWGnt1dGt+P/QHWKcMVS/3q7PyM+g2Q4Igtig== | 34, IPFS CIDv0 |
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa | AGLpB7FcvyfVQlOZ6/bw+1DruI8Ywpt9kw== | 25, endereço Bitcoin com checksum |
Todo CIDv0 vira um Base64 que começa com EiA: esse é o cabeçalho de multihash 12 20 (SHA-256, 32 bytes). Remova os dois primeiros bytes e você tem o digest puro, a forma que uma ferramenta SHA-256 imprime.
Por que dados da Solana aparecem nas duas codificações
A Solana mostra chaves públicas, IDs de programas e assinaturas de transações em Base58 nas carteiras e nos exploradores. Já a API JSON-RPC dela aceita transações serializadas em Base64 ou Base58 e marca o Base58 como a opção lenta e obsoleta. Os dados de contas voltam em Base64 quando você pede essa codificação. Assim, a mesma chave de 32 bytes pode aparecer em Base58 num lugar e dentro de Base64 em outro.
A conversão não muda os bytes, o que a torna um jeito seguro de comparar dois valores: se uma chave em Base58 e uma chave em Base64 dão o mesmo Base64 aqui, elas são a mesma chave.
Base58 para Base64 em Python
A biblioteca padrão tem Base64, mas não Base58, então a primeira metade é um loop curto:
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='
O ALPHABET.index lança ValueError para caracteres fora do Base58, como 0 ou l. Mais sobre Base64 em Python na página de Python.
Problemas comuns
- Falta um byte na contagem. O conversor que você usou antes descartou um byte zero inicial. Esta página o mantém; compare as saídas.
- Erro num
0,O,Ioul. Esses caracteres não são Base58. Procure um erro de cópia ou de OCR. - A entrada começa com
bc1,0xoubafy. Isso é, respectivamente, Bech32, hex e Base32 (IPFS CIDv1), não Base58. Para um CIDv1, o decodificador Base32 explica como lê-lo. - A saída tem 4 bytes a mais que o esperado. A string era Base58Check, e o checksum continua anexado.
Perguntas frequentes
Como converter uma chave pública Solana em Base64?
Cole o endereço na entrada. Uma chave pública Solana válida decodifica para exatamente 32 bytes, então a saída Base64 sempre tem 44 caracteres terminando com um =, ou 43 sem preenchimento.
Por que o Base64 começa com A?
A entrada Base58 começava com 1, que decodifica para um byte zero. O Base64 tira o primeiro caractere dos primeiros 6 bits, e seis bits zero são A. É por isso que o endereço Bitcoin 1A1zP1… vira AGLp….
Como obter Base64 URL-safe em vez disso?
Copie o resultado para o Base64 para Base64URL, que troca + e / por - e _ e remove o preenchimento. Desmarque Preenchimento (=) aqui se você só precisa tirar o =.
A saída é diferente para strings Base58Check?
A conversão é a mesma, mas o Base64 passa a incluir o byte de versão e o checksum de 4 bytes. Decodifique antes com a ferramenta Base58Check se você só quer o payload.