Codificador e decodificador com alfabeto personalizado

Digite o seu próprio alfabeto ou comece por uma predefinição e codifique ou decodifique com ele. Escolha Número grande para qualquer tamanho de alfabeto ou Grupos de bits para uma saída no estilo da RFC 4648.

Funciona inteiramente no seu navegador. Nada é enviado.

Como usar

  1. Digite o seu alfabeto ou escolha uma Predefinição e edite-a. Cada caractere só pode aparecer uma vez.
  2. Escolha o Método: Número grande para qualquer tamanho de alfabeto ou Grupos de bits para alfabetos de 2, 4, 8, 16, 32 ou 64 caracteres.
  3. Com Grupos de bits, você pode informar um Caractere de preenchimento que não faça parte do alfabeto.
  4. Codifique o seu texto ou cole uma string escrita no seu alfabeto para decodificá-la.

Duas formas de mapear bytes em caracteres

Número grande funciona como o Base58. A entrada inteira é lida como um único número inteiro grande e dividida repetidas vezes pelo tamanho do alfabeto; cada resto escolhe um caractere. Funciona com qualquer alfabeto de pelo menos 2 caracteres, como 10, 36, 58 ou 62. Os bytes zero iniciais são escritos como o primeiro caractere do alfabeto, então sobrevivem a uma ida e volta. Não há preenchimento, e a entrada é limitada a cerca de 20 KB porque a aritmética fica lenta com dados longos.

Grupos de bits funcionam como na RFC 4648. A entrada é cortada em blocos com um número fixo de bits: 1 bit para um alfabeto de 2 caracteres, 4 bits para 16, 5 bits para 32 e 6 bits para 64. Cada bloco é um índice no alfabeto. É exatamente assim que hex, Base32 e Base64 funcionam, e o tamanho da saída depende apenas do tamanho da entrada.

Por que os dois métodos dão resultados diferentes

Um método codifica o valor numérico dos dados; o outro, os bits posição por posição. Os resultados geralmente são diferentes, e uma string precisa ser decodificada com o mesmo método que a gerou.

AlfabetoEntradaGrupos de bitsNúmero grande
Base64 padrãoHiSGk=Ehp
Base32 da RFC 4648HiJBUQ====SDJ
01A010000011000001
0123456789Hiindisponível18537

Com Grupos de bits e = como preenchimento, os alfabetos padrão reproduzem o Base64 e o Base32 normais. Número grande descarta o bit zero inicial de A porque escreve um valor, e não um número fixo de bits. Com os dez dígitos como alfabeto, ele simplesmente mostra os bytes de Hi como um número decimal.

O caractere de preenchimento só se aplica a Grupos de bits. A saída é preenchida até um múltiplo de 4 caracteres para alfabetos de 64 caracteres e até um múltiplo de 8 para alfabetos de 32 e 8 caracteres. Com 2, 4 ou 16 caracteres, cada byte ocupa caracteres inteiros, então o preenchimento nunca é necessário.

Regras para um alfabeto válido

  • Pelo menos dois caracteres.
  • Sem repetições. O decodificador mapeia cada caractere de volta para exatamente um valor. Se a representasse tanto 0 quanto 10, uma string que o contivesse não poderia ser decodificada.
  • Maiúsculas e minúsculas fazem diferença. a e A são caracteres diferentes.
  • O caractere de preenchimento não pode estar no alfabeto, senão não seria possível distingui-lo dos dados.

Tudo é executado no seu navegador, então o seu alfabeto e os seus dados ficam no seu dispositivo.

Quando um alfabeto personalizado ajuda

  • IDs ofuscados. Um alfabeto embaralhado transforma identificadores em tokens sem um padrão óbvio. Isso esconde, mas não protege: qualquer pessoa que conheça o alfabeto consegue decodificá-los.
  • Formatos proprietários ou legados. Copie o alfabeto próprio de um sistema a partir da documentação dele e decodifique os dados diretamente.
  • Aprendizado. Compare tamanhos de alfabeto e os dois métodos para entender como funciona a conversão de base. Para alfabetos fixos, veja Base58 e Base62.

Perguntas frequentes

Qual é a diferença entre Número grande e Grupos de bits?

Número grande converte a entrada inteira, como um único número inteiro, para a nova base, como o Base58, e funciona com qualquer tamanho de alfabeto. Grupos de bits divide a entrada em blocos de bits de tamanho fixo, como o Base64, e exige um alfabeto de 2, 4, 8, 16, 32 ou 64 caracteres.

Por que o meu alfabeto Base64 personalizado não gera a mesma saída do Base64 padrão?

O Base64 padrão usa grupos de bits. Escolha o método Grupos de bits e defina = como Caractere de preenchimento para obter o mesmo resultado. O método Número grande gera uma string completamente diferente a partir do mesmo alfabeto.

Por que caracteres repetidos não são permitidos?

Cada caractere precisa ser decodificado para exatamente um valor. Um caractere repetido teria dois significados, e os dados originais não poderiam ser recuperados com segurança.

Posso usar um caractere de preenchimento com o método Número grande?

Não. A saída de Número grande não tem tamanho de bloco fixo, então não há nada a preencher. A opção de preenchimento só se aplica a Grupos de bits.

Um alfabeto personalizado é uma forma de criptografia?

Não. Continua sendo uma codificação sem chave. Um alfabeto embaralhado pode tornar os dados mais difíceis de reconhecer à primeira vista, mas nunca deve ser usado para proteger segredos.