Como usar
- Escolha Codificar para transformar texto ou bytes em Base58, ou Decodificar para transformar uma string Base58 de volta em dados.
- Escolha o Alfabeto. Bitcoin é o padrão e também é o usado pelo IPFS e pela Solana.
- Digite ou cole a entrada. Mude a entrada para Hex se você tiver bytes brutos, como um hash ou uma chave pública.
- Ative a Soma de verificação Base58Check somente se a string tiver uma soma de verificação de 4 bytes e depois copie ou baixe o resultado.
O que é Base58?
Base58 é uma codificação de binário para texto criada para o Bitcoin. Seu alfabeto é formado pelos 62 dígitos e letras latinas, menos quatro caracteres fáceis de confundir: 0 (zero), O (o maiúsculo), I (i maiúsculo) e l (L minúsculo). Ele também não tem +, / nem =, então uma string Base58 pode ser selecionada com um clique duplo e colocada em uma URL sem escape.
Ao contrário do Base64, o Base58 não divide a entrada em grupos de bits. A entrada inteira é tratada como um único número grande e escrita na base 58, por isso não há preenchimento e a mudança de um único byte pode alterar muitos caracteres da saída. Bytes zero à esquerda não têm valor numérico, então cada um deles é escrito como o primeiro caractere do alfabeto (1 no alfabeto Bitcoin) para ser preservado. A saída tem cerca de 1,37 vez o tamanho da entrada.
Onde o Base58 é usado
- Bitcoin. Endereços legados e chaves privadas WIF usam Base58Check: Base58 com um byte de versão e uma soma de verificação.
- IPFS. Um identificador de conteúdo da versão 0 (CIDv0) é a forma Base58 de um multihash SHA-256, e é por isso que esses CIDs têm 46 caracteres e começam com
Qm. - Solana. Chaves públicas, endereços de conta e assinaturas de transação são escritos em Base58 simples, sem soma de verificação. Uma chave de 32 bytes normalmente vira 43 ou 44 caracteres.
- Flickr e XRP Ledger. Os links curtos do Flickr usam o alfabeto Flickr, e os endereços XRP usam o alfabeto Ripple, motivo pelo qual começam com
r.
Para converter entre Base58 e bytes brutos, use Base58 para Hex e Hex para Base58. Para identificadores que só precisam ser alfanuméricos, compare com o Base62.
Alfabetos Base58
| Alfabeto | Caracteres, em ordem |
|---|---|
| Bitcoin | 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz |
| Flickr | 123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ |
| Ripple | rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz |
Os três usam os mesmos 58 caracteres em ordens diferentes, então uma string codificada com um alfabeto é decodificada em outros bytes, ou falha, quando se usa outro.
Base58 no código
# Python (pip install base58)
import base58
base58.b58encode(b'hello') # b'Cn8eVZg'
base58.b58decode('Cn8eVZg') # b'hello'
// JavaScript (npm install bs58)
import bs58 from 'bs58';
bs58.encode(new TextEncoder().encode('hello'));
Especificação
| Alfabeto | 1-9 A-Z a-z sem 0 O I l |
|---|---|
| Tamanho da saída | Cerca de 137% (conversão de número grande) |
| Preenchimento | Nenhum (bytes zero iniciais viram 1) |
| Padrão | Bitcoin Base58 |
| Diferencia maiúsculas e minúsculas | Sim |
Exemplos
| Entrada (UTF-8) | Saída |
|---|---|
Hello, World! | 72k1xXWG59fYdzSNoA |
Base64.is | r1Nm3AS7ZcnN |
你好 | 2xuZUfBKa |
Perguntas frequentes
Por que os bytes zero à esquerda viram 1?
1 no alfabeto Bitcoin. É por isso que 32 bytes zero são codificados como uma sequência de 32 uns.O Base58 diferencia maiúsculas de minúsculas?
Sim. Letras maiúsculas e minúsculas são dígitos diferentes, então mudar a caixa de um único caractere altera os bytes decodificados ou torna a string inválida.