FreeToGenerate.com

Roda inteiramente no seu navegador — nada do que você colar é enviado a lugar nenhum.

Direção
Alfabeto
Ler a entrada como

Não existe um alfabeto base58 padrão. Estes dois usam os mesmos 58 caracteres em ordens diferentes, então os mesmos bytes produzem textos diferentes — e um texto codificado com um decodifica com o outro sem erro nenhum, devolvendo bytes errados.

Os mesmos bytes com o outro alfabeto

É isto que torna as duas convenções perigosas, e não apenas diferentes:

Codificado com o alfabeto que você escolheu
2NEpo7TZsLFA2wMeK
Codificado com o outro
p4NFofTZ1LEwpAMeK

As duas cadeias são feitas só de caracteres válidos nos dois alfabetos. Nada em nenhuma delas diz qual convenção a produziu, então um decodificador que receba a errada devolve outros bytes e não relata erro algum.

Por que 58 e não 62

O base58 deixa de fora quatro das sessenta e duas letras e algarismos: o zero, o O maiúsculo, o I maiúsculo e o ele minúsculo. São os dois pares que uma pessoa não distingue com segurança na maioria das fontes. Também não tem caractere de preenchimento nem quebras de linha, porque o formato existe para ser copiado à mão, lido em voz alta e selecionado inteiro com um duplo clique.

0 I O l

Também disponível em: English · Español · Français · العربية

Codificar e decodificar base58

Codifique e decodifique base58 com qualquer um dos dois alfabetos, e veja o que acontece quando os dois são confundidos.

O que é base58?

Base58 é um jeito de escrever dados binários como texto, igual ao base64, mas pensado para sobreviver a ser lido por uma pessoa. Usa 58 caracteres em vez de 64, e os que descarta são a razão de existir: o zero, o O maiúsculo, o I maiúsculo e o ele minúsculo — os dois pares que quase ninguém distingue numa fonte comum — junto com o mais e a barra que o base64 usa e que quebram ao dar duplo clique ou ao pôr a cadeia numa URL.

O resultado não tem preenchimento, nem pontuação, nem quebras de linha. É uma sequência ininterrupta de letras e algarismos que você seleciona com um duplo clique, lê ao telefone ou copia de uma tela sem se perguntar se aquilo era um I ou um ele. É por isso que endereços de Bitcoin, hashes do IPFS e identificadores de conta do XRP Ledger usam todos ele.

E também, e esta é a parte que quase nenhuma ferramenta conta, não é um padrão.

Como usar o codificador

  1. Escolha a direção e o alfabeto. Codificar transforma bytes em base58; decodificar faz o contrário. O alfabeto importa — veja abaixo — e o do Bitcoin é quase com certeza o que você quer, a menos que trabalhe com o XRP Ledger.
  2. Digite ou cole a sua entrada. Ao codificar você pode pôr texto comum ou hex; ao decodificar, cole a cadeia base58. Qualquer caractere fora do alfabeto escolhido é recusado, e a ferramenta diz qual era.
  3. Olhe o segundo painel. Ele mostra os mesmos bytes codificados com o outro alfabeto, para você ver por conta própria como os dois resultados saem diferentes.

Não existe base58 padrão, e isso é um perigo real

O mais próximo de uma especificação é um rascunho da IETF, draft-msporny-base58, com status pretendido «informativo». Ele expirou em 2 de outubro de 2021 e nunca virou RFC. Todo o resto é convenção, e as convenções não coincidem.

As duas desta ferramenta vêm do código-fonte dos projetos que as definem: base58.cpp do Bitcoin Core e tokens.cpp do rippled. Usam exatamente o mesmo conjunto de 58 caracteres, e ordenam 23 desses 58 de outro jeito. Codifique «Hello, world» com o do Bitcoin e você recebe 2NEpo7TZsLFA2wMeK; com o do XRP Ledger, p4NFofTZ1LEwpAMeK.

Essa diferença é mais perigosa do que uma incompatibilidade declarada. Como os dois alfabetos contêm exatamente os mesmos caracteres, uma cadeia produzida por um é sempre uma cadeia sintaticamente válida para o outro. Entregue-a a um decodificador na convenção errada e você não recebe erro: recebe outros bytes, em silêncio. Nada dentro de uma cadeia base58 diz qual alfabeto a criou, então o formato não pode ajudar e nós também não; você precisa saber.

Um sintoma visível é o que acontece com os zeros à esquerda. Um byte zero no começo vira o primeiro caractere do alfabeto, que é o 1 no Bitcoin e o r no XRP Ledger. Então os mesmos três bytes 00 00 01 se escrevem 112 ou rrp, conforme o caso.

A regra dos zeros à esquerda, e por que se erra nela

Base58 é aritmética: trate a entrada como um único número enorme e divida repetidamente por 58. Isso funciona perfeitamente exceto por uma coisa — um número não lembra os seus zeros à esquerda. Os bytes 00 AB e AB são o mesmo inteiro, então um codificador puramente aritmético produz a mesma saída para os dois, e o tamanho dos seus dados muda ao decodificar.

A convenção resolve isso fora da aritmética. Os bytes zero iniciais são contados antes de a divisão começar e recolados depois, um caractere-zero do alfabeto para cada. É uma regra pregada à matemática, não uma consequência dela, e é exatamente por isso que ela é esquecida.

O Bitcoin Core publica 21 vetores de teste para base58, e sete deles carregam bytes zero à esquerda — uma proporção que parece deliberada, porque uma implementação que esqueça a regra passa nos outros catorze e parece correta. Este codificador passa nos 21 nos dois sentidos.

O que esta ferramenta não faz

Ela faz base58, não Base58Check. Endereços de Bitcoin não são base58 cru: são um byte de versão, a carga útil e uma soma de verificação de quatro bytes feita com um SHA-256 duplo, tudo codificado junto. Essa soma é o que permite a uma carteira recusar um endereço com um erro de digitação. Colar aqui um endereço de Bitcoin vai decodificá-lo corretamente para bytes, mas a ferramenta não vai verificar a soma nem dizer que o endereço é válido — ela é um codificador, não um validador de endereços, e confundir as duas coisas seria a escolha mais vistosa e menos honesta.

Ela também não tem opinião sobre o que os seus bytes significam. Base58 é transporte, então a saída decodificada aparece em hex, e como texto apenas quando os bytes por acaso são UTF-8 válido. Quando não são, a ferramenta diz isso em vez de mostrar caracteres de substituição, porque uma tela cheia de losangos com interrogação sugere que aquilo era texto e quebrou, quando em geral nunca foi texto.

Por que é grátis?

Tudo acontece no seu navegador. Nada do que você cola é enviado, registrado ou guardado — o que aqui importa mais do que na maioria das páginas, porque cadeias base58 costumam ser chaves, endereços e identificadores.

Sem conta, sem cadastro, sem limite e sem marca d'água em nada que você copiar.