Como decodificar Base58
- Cole a string em Entrada · Base58. Espaços e quebras de linha são ignorados.
- Leia os bytes em Saída · Hex. Abaixo da saída, você pode mudar a Caixa, acrescentar um Separador, como espaço ou
:, ou quebrar o dump em 16 ou 32 Bytes por linha. - Se a string não for Base58 no estilo Bitcoin, mude o Alfabeto abaixo da entrada para Flickr ou Ripple.
- Para outras visualizações, mude Para: Texto se os dados eram uma string, Base64 para uma API ou arquivo de configuração. O Base58 para Base64 é uma página preparada para essa conversão.
- Use Copiar saída, Baixar o hex ou Salvar bytes para obter os bytes decodificados como arquivo.
Para o que strings Base58 comuns decodificam
| Base58 | Bytes (hex) | O que é |
|---|---|---|
11111111111111111111111111111111 | 32 × 00 | System Program da Solana (chave de 32 bytes zero) |
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA | 06ddf6e1d765…7eff00a9 (32 bytes) | ID do programa SPL Token da Solana |
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa | 00 62e907b1…ebb88f18 c29b7d93 | Endereço do bloco gênese do Bitcoin: versão, hash, checksum |
QmQudp5N7EzTxrBk3yESEKyEroMYNd7R22G2KWffwNZyzq | 1220 262a86b6…e0882d8a | IPFS CIDv0: cabeçalho de multihash SHA-256, digest de 32 bytes |
9Ajdvzr | 48656c6c6f | O texto Hello |
Ler os bytes revela a estrutura. Um resultado de 25 bytes começando com 00 ou 05 é um endereço Bitcoin com o checksum ainda anexado, um resultado de 34 bytes começando com 1220 é um CIDv0, e 32 bytes sem estrutura visível provavelmente são uma chave pública.
Os 1s iniciais são bytes zero
No Base58, cada 1 inicial decodifica para um byte 00, e o resto da string decodifica como um único número. Este decodificador preserva esses bytes, então o endereço gênese acima retorna 25 bytes, não 24. Um decodificador que converte só o número os perde, e o primeiro sinal geralmente é uma chave com um byte a menos ou um checksum que nunca confere.
A regra vale no outro sentido também: 1111 são quatro bytes zero, enquanto 2 é o byte único 01.
Quando a decodificação falha
- Caractere inesperado
"0","O","I"ou"l". Esses quatro não estão no alfabeto Base58, que os deixa de fora por se parecerem com outros caracteres. O erro informa a posição; geralmente é um erro de transcrição. +,/ou=inesperado. A string é Base64. Use o decodificador Base64.- A entrada começa com
bc1. Isso é um endereço SegWit Bech32, outra codificação, com checksum e alfabeto próprios. Ela falha aqui ou decodifica para bytes sem sentido. - O hex está certo, mas sobram 4 bytes. Você decodificou um valor Base58Check como Base58 simples. Os últimos 4 bytes são o checksum; descarte-os ou use o Base58Check.
- Entrada acima de 64 KB. O Base58 trata a entrada inteira como um único número, então a ferramenta para em 64 KB para continuar responsiva. Valores Base58 reais têm algumas dezenas de caracteres.
Decodificar Base58 para hex no JavaScript
O BigInt deixa a conversão curta. Funciona em navegadores e no Node.js:
const ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
function base58ToHex(s) {
let n = 0n;
for (const ch of s) {
const v = ALPHABET.indexOf(ch);
if (v < 0) throw new Error(`not Base58: ${ch}`);
n = n * 58n + BigInt(v);
}
let hex = n === 0n ? "" : n.toString(16);
if (hex.length % 2) hex = "0" + hex;
const zeros = s.length - s.replace(/^1+/, "").length;
return "00".repeat(zeros) + hex;
}
base58ToHex("1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa");
// '0062e907b15cbf27d5425399ebf6f0fb50ebb88f18c29b7d93'
Para mais manipulação de bytes em JavaScript, veja a página de JavaScript.
Perguntas frequentes
Como decodificar um endereço Solana?
Cole aqui: a saída em hex é a chave pública Ed25519 de 32 bytes. O endereço do System Program, 11111111111111111111111111111111, decodifica para 32 bytes zero, um jeito rápido de ver a regra dos zeros à esquerda funcionando.
Por que meu endereço Bitcoin decodifica para 25 bytes?
Um endereço legado é Base58Check: 1 byte de versão, um hash de chave pública de 20 bytes e um checksum de 4 bytes. A decodificação Base58 simples devolve os 25 bytes. O decodificador Base58Check verifica o checksum e o remove para você.
Por que o decodificador rejeita minha string?
O Base58 não tem 0, O, I nem l, então um deles geralmente indica um erro de digitação ou outra codificação. Uma string com +, / ou = é Base64, e 0x… é hex.
Como converter Base58 em hex no JavaScript?
Acumule um BigInt dígito a dígito, imprima-o com toString(16) e depois acrescente 00 para cada 1 inicial. O trecho desta página mostra a função completa.