Enviar um arquivo
  1. base64hub
  2. Outras bases
  3. Base58Check

Codificador e decodificador Base58Check

Cole um byte de versão mais o payload em hex para obter a string Base58Check com o checksum de 4 bytes. Inverta a direção para decodificar um endereço ou chave WIF: o checksum é verificado e o payload volta em hex.

Grátis sem cadastro, sem limites Local nada é enviado Checksum verificado na decodificação Atualizado 27 de out. de 2026
Entrada 0Bytes 0 BSaída 0

Processado no seu navegador. Esta página não consegue enviar seus dados para lugar nenhum – como sabemos

Como codificar e decodificar Base58Check

Para codificar:

  1. Cole o hex em Entrada · Hex: primeiro o byte de versão, depois o payload. Espaços, dois-pontos e prefixos 0x são aceitos.
  2. Leia o resultado em Saída · Base58Check. A ferramenta calcula o checksum e o anexa antes de codificar.
  3. Mantenha o Alfabeto em Bitcoin para o Bitcoin e a maioria dos forks.

Para decodificar, clique em Base58Check → Hex no seletor de direção e cole o endereço ou a chave. O decodificador converte a string, recalcula o checksum e devolve o payload (ainda começando com o byte de versão) somente se os 4 bytes do checksum conferirem. Um único caractere digitado errado gera “checksum não confere: a string foi digitada errado ou está corrompida.”

O que o Base58Check acrescenta ao Base58

O Base58 simples não tem detecção de erros: um erro de digitação gera uma string diferente, mas igualmente válida. O Base58Check resolve isso com dois acréscimos:

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

O conjunto inteiro é então codificado em Base58, então os bytes zero iniciais viram 1s. O byte de versão escolhe a rede e o tipo de dado e, como fica na frente do número, também determina o primeiro caractere do resultado.

Bytes de versão e prefixos

O mesmo hash de 20 bytes, 62e907b15cbf27d5425399ebf6f0fb50ebb88f18, com bytes de versão diferentes:

VersãoSignificadoPrimeiro caractereResultado
00Endereço Bitcoin P2PKH11A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
05Endereço Bitcoin P2SH33Ai1JZ8pdJb2ksieUV8FsxSNVJCpoPi8W6
6fEndereço P2PKH de testnetm ou nmpXwg4jMtRhuSpVq4xS3HFHmCmWp9NyGKt
c4Endereço P2SH de testnet22N2GDNJ4rEm6NxfMC9ck8VuRdheQzXWaNZv

A primeira linha é o endereço que recebeu a recompensa do bloco gênese do Bitcoin. As outras linhas só ilustram o byte de versão: envolver um hash de chave pública num byte de versão P2SH não gera um endereço P2SH utilizável, já que o P2SH é o hash de um script.

Chaves privadas WIF

O Wallet Import Format é Base58Check com o byte de versão 80 e uma chave privada de 32 bytes. Um byte 01 no final indica uma chave cuja chave pública é usada na forma comprimida. Com a conhecida chave de exemplo da wiki do Bitcoin:

Entrada hexBase58Check
80 + 0C28FCA386C7A227600B2FE50B7CAE11EC86D3BF1FBE471BE89827E19D72AA1D5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ
a mesma + 01KwdMAjGmerYanjeui5SHS7JkmpZvVipYvB2LJGU1ZxJwYvP98617

Chaves WIF não comprimidas começam com 5, as comprimidas com K ou L. Esta chave de exemplo é pública; nunca a use para fundos reais.

Base58Check em Python

O checksum são duas chamadas de SHA-256 da biblioteca padrão. Com um pequeno codificador 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'

Para verificar uma string no código, decodifique-a com Base58, separe os últimos 4 bytes e compare-os com o hash duplo do resto. Mais sobre manipulação de bytes em Python na página de Python.

Problemas comuns

  • Checksum não confere. A string tem um erro de digitação, foi cortada ou é Base58 simples sem checksum (endereços Solana e hashes IPFS são Base58 simples; use o decodificador Base58 para eles).
  • “Curto demais para conter o checksum de 4 bytes”. O valor decodificado tem menos de 4 bytes, então não pode ser Base58Check.
  • Caractere inesperado "0", "O", "I" ou "l". Não está no alfabeto Base58; confira a transcrição.
  • Primeiro caractere errado depois de codificar. Confira o byte de versão. Sem ele, um hash de 20 bytes geralmente vira uma string que não começa com 1.

Perguntas frequentes

Como o checksum do Base58Check é calculado?

Calcule o SHA-256 do payload (incluindo o byte de versão), calcule o SHA-256 do resultado de novo e pegue os 4 primeiros bytes. Esses 4 bytes são anexados antes da codificação Base58.

Um checksum válido significa que é seguro enviar para o endereço?

Significa que a string não foi digitada errado: um erro de digitação aleatório passa com chance de cerca de 1 em 4,3 bilhões. Isso não diz nada sobre quem controla o endereço nem se ele pertence à rede que você imagina.

O Base58Check decodifica endereços bc1?

Não. Endereços que começam com bc1 são Bech32 ou Bech32m (SegWit e Taproot), que usam outro alfabeto e outro checksum.

Devo colar uma chave privada real aqui?

A conversão roda no seu navegador e a página bloqueia todas as requisições de rede, exceto as do contador de visitas da Cloudflare, mas uma chave WIF controla fundos. Use uma chave de teste, ou uma máquina offline, para qualquer coisa que tenha valor.