Come si usa
- Scegli Codifica per trasformare il testo in Base45, oppure Decodifica per riportare il Base45 in testo o byte.
- Digita o incolla l’input, oppure apri un file. Mantieni gli eventuali spazi: fanno parte dell’alfabeto.
- Quando decodifichi dati binari, come il payload di un certificato, imposta l’output su Esadecimale.
- Copia il risultato o scaricalo come file.
Che cos’è Base45?
Base45 è definito nella RFC 9285. Il suo alfabeto comprende le cifre 0-9, le lettere maiuscole A-Z e nove simboli: lo spazio e $ % * + - . / :. Sono esattamente i 45 caratteri che un codice QR può memorizzare nella sua compatta modalità alfanumerica. Tieni presente che lo spazio è un vero carattere dell’alfabeto, non un separatore.
Il codificatore prende l’input due byte alla volta, li legge come un numero da 0 a 65535 e scrive quel numero come tre cifre Base45, a partire dalla cifra meno significativa. Un singolo byte finale diventa due caratteri. Come testo, il risultato è grande 1,5 volte l’input, più che con Base64.
Perché Base45 è adatto ai codici QR
In modalità alfanumerica un codice QR racchiude due caratteri in 11 bit. Base64 non può usare questa modalità perché richiede lettere minuscole, quindi ripiega sulla modalità byte con 8 bit per carattere, circa 10,7 bit per ogni byte di dati. In modalità alfanumerica Base45 richiede solo 8,25 bit per byte, quindi gli stessi dati entrano in un codice QR più piccolo e più facile da scansionare.
In decodifica, mantieni gli spazi esattamente come sono; vengono ignorate solo le interruzioni di riga. Le lettere minuscole non fanno parte dell’alfabeto e vengono segnalate come non valide.
Decodificare i certificati COVID digitali dell’UE
I codici QR dei certificati COVID digitali dell’UE contengono un testo che inizia con HC1:. Il resto è Base45: i dati del certificato sono codificati in CBOR, firmati con COSE, compressi con zlib e infine codificati in Base45. Per vedere che cosa contengono:
- Rimuovi il prefisso
HC1:. I suoi quattro caratteri sono Base45 valido, quindi se li lasci ottieni byte sbagliati. - Decodifica qui il resto con l’output Esadecimale. Di solito i dati zlib iniziano con il byte
78. - Decomprimi i byte con zlib e analizza il CBOR con un altro strumento.
Questo strumento gestisce solo la fase Base45. Non decomprime i dati, non li analizza e non verifica la firma.
Base45 nel codice
# Python (pip install base45)
import base45
base45.b45encode(b'AB') # esempio della RFC 9285: BB8
base45.b45decode('BB8') # b'AB'
Specifiche
| Alfabeto | 0-9 A-Z spazio $ % * + - . / : |
|---|---|
| Dimensione dell’output | 3 caratteri ogni 2 byte (150%) |
| Padding | Nessuno |
| Standard | RFC 9285 |
| Distingue maiuscole/minuscole | Sì |
Esempi
| Input (UTF-8) | Output |
|---|---|
Hello, World! | %69 VDK2E:3404ESVDX0 |
Base64.is | SH8LQEG%61*5P2 |
你好 | C-SEFK*.K |
Domande frequenti
Perché l’output Base45 contiene spazi?
Lo spazio è uno dei 45 caratteri dell’alfabeto, quindi trasporta dati. Non eliminare né comprimere gli spazi in un testo Base45, altrimenti la decodifica non riesce o restituisce byte sbagliati.
Come si decodifica una stringa HC1:?
Rimuovi il prefisso HC1:, decodifica il resto con l’output Esadecimale, poi decomprimi il risultato con zlib e leggi i dati CBOR con uno strumento separato. Questo strumento esegue solo la fase Base45.
Base45 distingue tra maiuscole e minuscole?
Sì. Solo le lettere maiuscole fanno parte dell’alfabeto, perché la modalità alfanumerica dei codici QR non prevede minuscole. Un input in minuscolo viene segnalato come non valido, insieme alla sua posizione.
Base45 è più compatto di Base64?
Come testo semplice, no: Base45 è 1,5 volte la dimensione dell’input e Base64 circa 1,33 volte. All’interno di un codice QR, sì, perché Base45 può usare la modalità alfanumerica, che è più densa.