Codificador e Decodificador Base58

Etapa 1 / 333%

Entrada


            

Base58 é uma codificação de dados binários em texto criada para evitar alguns caracteres fáceis de confundir. O alfabeto Bitcoin não usa 0 O I l nem + /; outros sistemas organizam os mesmos 58 símbolos em outra ordem. Endereços Bitcoin antigos em Base58Check e strings IPFS CIDv0 são exemplos conhecidos. Esta ferramenta funciona somente no navegador, converte texto UTF-8 ou bytes hexadecimais exatos com o alfabeto Bitcoin, Ripple ou Flickr e rejeita caracteres que não pertencem ao alfabeto escolhido.

Como codificar e decodificar Base58

  1. 1

    Insira bytes ou uma string Base58

    A direção de codificação aceita texto hex ou bruto; a direção de decodificação aceita Base58.

  2. 2

    Escolha o alfabeto se necessário

    O padrão é o Base58 do Bitcoin; variantes Ripple e Flickr disponíveis para compatibilidade.

  3. 3

    Execute a conversão

    Base58 não se divide em grupos de 5 ou 6 bits; é tratado como um único inteiro big-endian, dividido por 58 repetidamente.

  4. 4

    Copie o resultado

    Strings codificadas preservam bytes zero à frente como caracteres `1` à frente (o glifo zero no alfabeto do Bitcoin).

O alfabeto Base58 do Bitcoin

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

Observe o que está faltando: 0, O, I, l. O primeiro caractere no alfabeto é 1, que representa o inteiro 0.

Como funciona na prática

Diferente do Base64 que divide bits em grupos fixos, o Base58 trata toda a string de bytes como um único inteiro big-endian N e o expressa na base 58:

result = []
while N > 0:
    result.prepend(alphabet[N mod 58])
    N = N / 58
for each leading zero byte in input:
    result.prepend(alphabet[0])  # ou seja, '1'

É por isso que a codificação Base58 não é trivial para transmitir, você precisa do número inteiro completo antes de poder emitir qualquer caractere.

Base58 vs Base58Check

A carga Base58Check típica de um endereço P2PKH antigo tem 25 bytes: 1 byte de versão, 20 bytes de hash e 4 bytes de soma de verificação. A soma corresponde aos primeiros 4 bytes do SHA-256 duplo da versão e do hash. A codificação Base58 dessa carga completa produz a string de endereço conhecida.

Esta ferramenta converte apenas Base58 simples. Use um validador Base58Check específico quando precisar verificar a versão e a soma de um endereço.

Variantes do alfabeto

Variante Onde é usado Diferenças em relação ao Bitcoin
Bitcoin Endereços BTC, IPFS CIDv0 Base padrão
Ripple Endereços XRP Posições trocadas
Flickr URLs curtas de fotos Minúsculas antes de maiúsculas

Por que não usar apenas Base64?

Base64 não tem mudança de comprimento entre texto binário e codificado (4 caracteres por 3 bytes), o que é eficiente. Base58 tem uma sobrecarga ligeiramente variável, mas sem caracteres ambíguos, que é o que você quer quando alguém precisa copiar um endereço à mão ou lê-lo ao telefone.

Perguntas frequentes

Não universalmente. Base58 é melhor quando humanos lidam com a string; Base64 é melhor quando máquinas a transportam. Base64 codifica 6 bits por caractere contra ~5,86 do Base58, então Base64 é ligeiramente mais compacto.

Base58 codifica um grande inteiro, então o comprimento varia por um caractere ou dois dependendo dos bits de ordem superior. Endereços P2PKH típicos têm 34 caracteres, mas 33 é possível.

A ferramenta pode decodificar a string em bytes brutos; escolha a saída hexadecimal para exibir qualquer byte sem perda. Ela não verifica a versão nem a soma de verificação, portanto a decodificação não prova que o endereço é válido. Para isso, use um validador Base58Check.

Sim. Cada byte zero no início da entrada se torna um caractere 1 na saída, que é como os endereços Bitcoin que começam com 1 funcionam.

Ferramentas relacionadas