Codificatore e decodificatore Base85

Converti testo, byte esadecimali o file in Base85 e viceversa. Questa pagina usa il set di caratteri RFC 1924, la variante prodotta da Python b85encode e usata nelle patch binarie di Git.

Funziona interamente nel tuo browser. Non viene caricato nulla.

Come si usa

  1. Scegli Codifica per trasformare testo o byte in Base85, oppure Decodifica per riportare Base85 ai dati originali.
  2. Digita o incolla l’input, oppure apri un file. Se lavori con byte grezzi, imposta Formato input su Esadecimale.
  3. Il risultato si aggiorna mentre scrivi. In decodifica, scegli l’output Testo o Esadecimale in base al contenuto dei dati.
  4. Copia il risultato o scaricalo come file.

Che cos’è Base85?

Base85 è una famiglia di codifiche che trasformano ogni gruppo di 4 byte in 5 caratteri. Cinque cifre in base 85 possono rappresentare 85 × 85 × 85 × 85 × 85 = 4.437.053.125 valori, appena sufficienti per qualsiasi numero a 32 bit, quindi l’output è solo il 25% più grande dell’input, contro il 33% di Base64.

Esistono diversi alfabeti Base85 e non sono intercambiabili: Ascii85 (Adobe, PDF), Z85 (ZeroMQ) e quello di questa pagina. Quest’ultimo usa 0-9, A-Z, a-z e 23 simboli: !#$%&()*+-;<=>?@^_`{|}~. Restano esclusi le virgolette, la virgola, il punto, la barra, i due punti, la barra rovesciata e le parentesi quadre.

RFC 1924, Git e Python

Il set di caratteri viene dalla RFC 1924, "A Compact Representation of IPv6 Addresses", pubblicata il 1° aprile 1996 come pesce d’aprile. Proponeva di scrivere un indirizzo IPv6 a 128 bit come un unico numero in base 85 di esattamente 20 caratteri. Nessuno scrive gli indirizzi IPv6 in quel modo, ma l’alfabeto è stato poi riutilizzato per i dati binari in generale:

  • Git memorizza i file binari nelle patch (git diff --binary, git format-patch) come dati compressi con zlib e codificati con questo alfabeto, con un carattere di lunghezza all’inizio di ogni riga.
  • Python 3.4 e versioni successive offre base64.b85encode() e b85decode(), il cui output coincide con quello di questo strumento.
  • Mercurial usa la stessa codifica per i file binari nei diff in stile Git.

Tieni presente che la RFC 1924 converte l’intero indirizzo a 128 bit in un’unica operazione, mentre Git, Python e questo strumento lavorano a gruppi di 4 byte, quindi un valore di 16 byte dà un risultato diverso da quello del metodo della RFC.

Gruppi finali incompleti

Quando la lunghezza dell’input non è un multiplo di 4, l’ultimo gruppo viene completato con byte zero, codificato, e si tengono solo i primi n + 1 caratteri: 1 byte diventa 2 caratteri, 2 byte diventano 3 e 3 byte diventano 4. Il decodificatore inverte il procedimento, quindi non servono caratteri di padding. Questa variante non ha una scorciatoia per i byte zero, a differenza della z di Ascii85.

# Python 3.4+
import base64
base64.b85encode(b'hello')      # b'Xk~0{Zv'
base64.b85decode(b'Xk~0{Zv')    # b'hello'

Specifiche

Alfabeto0-9 A-Z a-z !#$%&()*+-;<=>?@^_`{|}~
Dimensione dell’output5 caratteri ogni 4 byte (125%)
PaddingNessuno
StandardSet di caratteri RFC 1924 (Git, Python b85)
Distingue maiuscole/minuscoleSì

Esempi

Input (UTF-8)Output
Hello, World!NM&qnZ!92JZ*pv8Ap
Base64.isLSb`dHZ(42a{
你好<h`KfrM&

Domande frequenti

Base85 è la stessa cosa di Ascii85?
Usano la stessa aritmetica ma caratteri diversi, quindi il loro output è diverso. Inoltre Ascii85 abbrevia quattro byte zero con z e può essere racchiuso tra i delimitatori Adobe. Per i dati PDF e PostScript usa la pagina Ascii85.
La RFC 1924 era un vero standard?

No. È una RFC informativa pubblicata come pesce d’aprile e non è mai stata usata per gli indirizzi IPv6. Il suo set di caratteri si è diffuso più tardi grazie a Git e Python.

Quanto è più grande l’output Base85?
Ogni gruppo di 4 byte diventa 5 caratteri, quindi l’output è 1,25 volte l’input. Base64 è circa 1,33 volte. basE91 è ancora un po’ più compatto.
Posso inserire Base85 in JSON o XML?
In JSON sì: l’alfabeto non contiene virgolette doppie né barre rovesciate, quindi non c’è nulla da sottoporre a escape. In XML e HTML i caratteri <, > e & vanno sottoposti a escape. Base85 non è sicuro per gli URL.