Como usar
- Escolha Codificar para transformar texto em Base45 ou Decodificar para transformar Base45 de volta em texto ou bytes.
- Digite ou cole a entrada, ou abra um arquivo. Mantenha todos os espaços: eles fazem parte do alfabeto.
- Ao decodificar dados binários, como o conteúdo de um certificado, mude a saída para Hex.
- Copie o resultado ou baixe-o como arquivo.
O que é Base45?
O Base45 é definido na RFC 9285. Seu alfabeto é formado pelos dígitos 0-9, pelas letras maiúsculas A-Z e por nove símbolos: o espaço e $ % * + - . / :. São exatamente os 45 caracteres que um QR code consegue armazenar no seu modo alfanumérico compacto. Observe que o espaço é um caractere real do alfabeto, não um separador.
O codificador lê a entrada de dois em dois bytes, interpreta cada par como um número de 0 a 65535 e escreve esse número como três dígitos Base45, começando pelo dígito menos significativo. Um byte isolado no final vira dois caracteres. Como texto, o resultado tem 1,5 vez o tamanho da entrada, mais do que o Base64.
Por que o Base45 combina com QR codes
No modo alfanumérico, um QR code guarda dois caracteres em 11 bits. O Base64 não pode usar esse modo porque precisa de letras minúsculas, então recorre ao modo byte, com 8 bits por caractere, o que dá cerca de 10,7 bits para cada byte de dados. O Base45 precisa de apenas 8,25 bits por byte no modo alfanumérico, então os mesmos dados cabem em um QR code menor e mais fácil de escanear.
Ao decodificar, mantenha os espaços exatamente como estão; apenas as quebras de linha são ignoradas. Letras minúsculas não fazem parte do alfabeto e são informadas como inválidas.
Como decodificar Certificados Digitais COVID da UE
Os QR codes dos Certificados Digitais COVID da UE contêm um texto que começa com HC1:. O restante é Base45: os dados do certificado são codificados em CBOR, assinados com COSE, compactados com zlib e só então codificados em Base45. Para ver o conteúdo:
- Remova o prefixo
HC1:. Seus quatro caracteres são Base45 válido, então mantê-los produz bytes errados. - Decodifique o restante aqui com saída em Hex. Dados zlib geralmente começam com o byte
78. - Descompacte os bytes com zlib e analise o CBOR com outra ferramenta.
Esta ferramenta cuida apenas da etapa Base45. Ela não descompacta os dados, não os analisa e não verifica a assinatura.
Base45 no código
# Python (pip install base45)
import base45
base45.b45encode(b'AB') # exemplo da RFC 9285: BB8
base45.b45decode('BB8') # b'AB'
Especificação
| Alfabeto | 0-9 A-Z espaço $ % * + - . / : |
|---|---|
| Tamanho da saída | 3 caracteres a cada 2 bytes (150%) |
| Preenchimento | Nenhum |
| Padrão | RFC 9285 |
| Diferencia maiúsculas e minúsculas | Sim |
Exemplos
| Entrada (UTF-8) | Saída |
|---|---|
Hello, World! | %69 VDK2E:3404ESVDX0 |
Base64.is | SH8LQEG%61*5P2 |
你好 | C-SEFK*.K |
Perguntas frequentes
Por que a saída Base45 contém espaços?
O espaço é um dos 45 caracteres do alfabeto, então ele carrega dados. Não remova nem junte espaços em um texto Base45, ou a decodificação vai falhar ou gerar bytes errados.
Como decodificar uma string HC1:?
Remova o prefixo HC1:, decodifique o restante com saída em Hex, depois descompacte o resultado com zlib e leia os dados CBOR com uma ferramenta separada. Esta ferramenta realiza apenas a etapa Base45.
O Base45 diferencia maiúsculas de minúsculas?
Sim. Somente as letras maiúsculas pertencem ao alfabeto, porque o modo alfanumérico do QR code não tem minúsculas. Entradas em minúsculas são informadas como inválidas, junto com a sua posição.
O Base45 é mais compacto que o Base64?
Como texto puro, não: o Base45 tem 1,5 vez o tamanho da entrada, e o Base64, cerca de 1,33 vez. Dentro de um QR code, sim, porque o Base45 pode usar o modo alfanumérico, que é mais denso.