Codificatore e decodificatore Base64

Codifichi testo in Base64 o decodifichi Base64 di nuovo in testo leggibile. Supporta quattro modalità di formato: Stringa, JSON, XML e YAML. JSON/XML/YAML vengono formattati automaticamente in fase di decodifica. Vedi anche: Convertitore Base64 di immagini | File in Base64 | Esadecimale ↔ Base64.
Tutta l'elaborazione avviene localmente nel suo browser — i dati non vengono mai caricati su nessun server.
Formato: Direzione:
Alfabeto: A capo:
What is Base64? Base64 is a binary-to-text encoding scheme that represents data using 64 ASCII characters (A-Z, a-z, 0-9, +, /). It is commonly used to transmit binary data over text-based protocols like HTTP, JSON, or XML.
String mode: Direct encode/decode of any text.
JSON/XML/YAML modes: When decoding, the result is validated, parsed, and pretty-printed for readability. When encoding, the input is validated before being Base64-encoded.
URL-safe: Replaces + with - and / with _, and strips trailing = padding — safe to use in URLs and filenames without percent-encoding.
Che cos'è la Base64?

La Base64 riscrive i byte usando sessantaquattro caratteri leggibili, così i dati sopravvivono a un canale costruito per il testo: il corpo di un'email, una stringa JSON, un attributo XML, un URL. Ogni tre byte diventano quattro caratteri, ed è da lì che viene il nome — l'alfabeto contiene sessantaquattro simboli e ciascuno porta esattamente sei bit.

È una codifica di trasporto, non una misura di sicurezza e non un passaggio di compressione. L'output è circa un terzo più grande dell'input, e chiunque abbia la stringa può riportarla subito indietro. Se si vuole sapere se i dati sono stati alterati, serve un hash (Generatore di hash); se si vogliono mantenere segreti, serve la crittografia. La Base64 non fa nessuna delle due cose.

L'unico numero da ricordare: tre byte di input diventano quattro caratteri di output. Tutto il resto di questa pagina ne deriva. Quattro caratteri portano ventiquattro bit, e ventiquattro bit corrispondono esattamente a tre byte, quindi nessun dato viene mai perso o inventato — tranne alla fine, dove l'input potrebbe non riempire l'ultimo gruppo di tre.
I cinque alfabeti che questa pagina può usare

Le prime due righe sono standard e le ultime tre sono convenzioni nate intorno a Unix. Tutte e cinque portano gli stessi sei bit per carattere e differiscono solo per quali sessantaquattro caratteri li portano, quindi gli stessi byte diventano cinque stringhe diverse. Nessun elemento all'interno di una stringa dice quale alfabeto l'ha prodotta, ed è per questo che il selettore dell'alfabeto parte dallo standard e che la casella sicura per URL è una scorciatoia per la seconda riga.

Come la pagina sceglie un candidato: il selettore è il predefinito per entrambe le direzioni. In decodifica, il pannello a destra legge anche la stringa stessa — - e _ possono venire solo dall'alfabeto sicuro per URL, + o / solo da quello standard, e una / o un . vicino all'inizio indicano i due alfabeti Unix. Ogni alfabeto che può leggere l'input corrente è elencato lì, con il motivo per cui è o non è un candidato.
A capo: 76 e 64 caratteri

La MIME ha richiesto una Base64 che stia in un'email senza che nessuna riga diventi eccessivamente lunga, e ha stabilito 76 caratteri per riga separati da CRLF. I file PEM, che racchiudono certificati e chiavi, usano 64. Le interruzioni di riga non fanno parte dei dati: un decodificatore le elimina e riunisce le righe prima di fare qualunque altra cosa, quindi una stringa con a capo e una senza decodificano esattamente negli stessi byte. Ogni riga tranne l'ultima contiene un numero intero di gruppi di quattro caratteri, ed è ciò che rende sicuro riunirle.

Questa pagina lascia l'output su una sola riga a meno che non si scelga una larghezza, e il decodificatore accetta input con o senza interruzioni di riga. Le interruzioni scritte da questa pagina sono semplici line feed, che è ciò che una casella di testo può contenere; i corpi delle email MIME tradizionalmente usano un carriage return prima di ogni line feed, e tutti i decodificatori in uso accettano entrambi.

Il riempimento, e perché può essere eliminato

Quando l'input non è un multiplo di tre byte, l'ultimo gruppo di quattro caratteri è incompleto, e uno o due caratteri = lo completano. Non portano alcun dato: dicono solo quanti dei quattro caratteri sono reali. Un decodificatore può ricavarlo dalla lunghezza, ed è per questo che la Base64 sicura per URL tradizionalmente omette il riempimento — un = è scomodo in un URL o in un nome di file, e alcuni sistemi lo codificano in percentuale.

La casella nella riga delle opzioni mantiene il riempimento quando è selezionato l'alfabeto sicuro per URL. Nient'altro cambia; i caratteri che portano dati sono identici in entrambi i casi.

Equivoci comuni
  • "La Base64 nasconde i dati." No. È una sostituzione senza chiave, e il punto è proprio che qualunque lettore può annullarla. Mettere una password o un token in Base64 non cambia nulla su chi può leggerla.
  • "La Base64 comprime." Il contrario: ogni tre byte di input diventano quattro caratteri di output, quindi il testo è un terzo più grande dei dati che trasporta.
  • "Le interruzioni di riga fanno parte del valore." Sono presentazione. Aggiungerle o toglierle non cambia mai i byte che vengono restituiti.
  • "Sicuro per URL significa una codifica diversa." È la stessa codifica con due caratteri scambiati: + diventa - e / diventa _, quindi la stringa può stare in un percorso URL o in un valore di query senza escape.
  • "Una stringa che si decodifica deve essere Base64 valida." Qualsiasi stringa di caratteri dell'alfabeto è una Base64 valida, perché ogni combinazione di valori a sei bit è una sequenza valida di byte. Una stringa risulta sbagliata solo al passo successivo, quando quei byte vengono verificati contro il formato che avrebbero dovuto avere.
  • "Il riempimento indica quale alfabeto è stato usato." No, e nella maggior parte dei casi non lo fanno nemmeno i caratteri: lo standard e l'alfabeto sicuro per URL concordano su sessantadue dei loro sessantaquattro simboli, quindi una stringa breve spesso si legge allo stesso modo in entrambi.
Domande ricorrenti

Perché una stringa Base64 a volte finisce con un = e a volte con due? Uno significa che l'ultimo gruppo porta tre caratteri reali, cioè due byte di input; due significa che ne porta due, cioè un byte di input. Nessun = significa che la lunghezza dell'input era un multiplo di tre.

La Base64 può rappresentare file binari arbitrari? Sì, ed è il suo uso principale. Questa pagina tratta l'input come testo UTF-8; lo strumento dedicato File in Base64 legge i byte grezzi quando si vuole codificare qualcosa che non è testo.

Quale alfabeto usare in un'API? Quello che documenta il sistema ricevente. Se dice sicuro per URL, si usi quello; se non dice nulla e il valore viaggia in un URL, la scelta sicura è l'alfabeto sicuro per URL senza riempimento.

L'output distingue maiuscole e minuscole? Completamente. a e A sono valori diversi, ed è per questo che la Base64 sopporta un carattere digitato male molto meno bene della Base32 o della Base32 di Crockford.