Como usar
- Escolha Codificar para transformar texto ou bytes em Base85, ou Decodificar para transformar Base85 de volta em dados.
- Digite ou cole a entrada, ou abra um arquivo. Mude a entrada para Hex se estiver trabalhando com bytes brutos.
- O resultado é atualizado enquanto você digita. Ao decodificar, escolha a saída Texto ou Hex de acordo com o conteúdo dos dados.
- Copie o resultado ou baixe-o como arquivo.
O que é Base85?
Base85 é uma família de codificações que transformam cada grupo de 4 bytes em 5 caracteres. Cinco dígitos na base 85 podem representar 85 × 85 × 85 × 85 × 85 = 4.437.053.125 valores, o suficiente para qualquer número de 32 bits, então a saída é apenas 25% maior que a entrada, contra 33% do Base64.
Existem vários alfabetos Base85, e eles não são intercambiáveis: Ascii85 (Adobe, PDF), Z85 (ZeroMQ) e o desta página. Ele usa 0-9, A-Z, a-z e 23 símbolos: !#$%&()*+-;<=>?@^_`{|}~. As aspas, a vírgula, o ponto, a barra, os dois-pontos, a barra invertida e os colchetes ficam de fora.
RFC 1924, Git e Python
O conjunto de caracteres vem da RFC 1924, "A Compact Representation of IPv6 Addresses", publicada em 1º de abril de 1996 como piada de Dia da Mentira. Ela propunha escrever um endereço IPv6 de 128 bits como um único número na base 85 com exatamente 20 caracteres. Ninguém escreve endereços IPv6 dessa forma, mas o alfabeto foi reaproveitado mais tarde para dados binários em geral:
- Git: armazena arquivos binários em patches (
git diff --binary,git format-patch) como dados compactados com zlib e codificados com este alfabeto, com um caractere de comprimento no início de cada linha. - Python: a partir da versão 3.4, oferece
base64.b85encode()eb85decode(), cuja saída coincide com a desta ferramenta. - Mercurial: usa a mesma codificação para arquivos binários em diffs no estilo do Git.
Observe que a RFC 1924 converte o endereço de 128 bits inteiro de uma só vez, enquanto o Git, o Python e esta ferramenta trabalham em grupos de 4 bytes, então um valor de 16 bytes dá um resultado diferente do método da RFC.
Grupos finais curtos
Quando o comprimento da entrada não é múltiplo de 4, o último grupo é completado com bytes zero e codificado, e apenas os primeiros n + 1 caracteres são mantidos: 1 byte vira 2 caracteres, 2 bytes viram 3 e 3 bytes viram 4. O decodificador faz o caminho inverso, então nenhum caractere de preenchimento é necessário. Esta variante não tem atalho para bytes zero, ao contrário do z do Ascii85.
# Python 3.4+
import base64
base64.b85encode(b'hello') # b'Xk~0{Zv'
base64.b85decode(b'Xk~0{Zv') # b'hello'
Especificação
| Alfabeto | 0-9 A-Z a-z !#$%&()*+-;<=>?@^_`{|}~ |
|---|---|
| Tamanho da saída | 5 caracteres a cada 4 bytes (125%) |
| Preenchimento | Nenhum |
| Padrão | Conjunto de caracteres da RFC 1924 (Git, Python b85) |
| Diferencia maiúsculas e minúsculas | Sim |
Exemplos
| Entrada (UTF-8) | Saída |
|---|---|
Hello, World! | NM&qnZ!92JZ*pv8Ap |
Base64.is | LSb`dHZ(42a{ |
你好 | <h`KfrM& |
Perguntas frequentes
Base85 é o mesmo que Ascii85?
z e pode vir entre os delimitadores da Adobe. Use a página Ascii85 para dados de PDF e PostScript.A RFC 1924 foi um padrão de verdade?
Não. É uma RFC informativa publicada como piada de Dia da Mentira e nunca foi usada para endereços IPv6. Seu conjunto de caracteres ficou popular mais tarde graças ao Git e ao Python.
Quanto maior fica a saída em Base85?
Posso colocar Base85 em JSON ou XML?
<, > e & precisam de escape. O Base85 não é seguro para URL.