Base64
7 tools
Cos'è la codifica?
La codifica è il processo di conversione dei dati da una rappresentazione a un'altra. Nello sviluppo Web, la codifica viene utilizzata per trasmettere dati in modo sicuro attraverso canali progettati per un set di caratteri limitato.
La codifica dei caratteri definisce come i caratteri di testo si mappano ai byte. La codifica Base64 converte i dati binari in testo ASCII. La codifica URL rende il testo arbitrario sicuro per l'uso negli URL.
Storia della codifica dei caratteri
La codifica dei caratteri è la mappatura tra caratteri e le loro rappresentazioni binarie:
Codice standard americano a 7 bit. 128 caratteri: lettere inglesi, cifre, punteggiatura e codici di controllo.
ASCII esteso per le lingue dell'Europa occidentale. Aggiunge 128 caratteri. Non adatto agli script non latini.
Set di caratteri universale che copre tutti i sistemi di scrittura del mondo. Definisce code point per oltre 149.000 caratteri.
Codifica a larghezza variabile di Unicode che usa da 1 a 4 byte per carattere. Compatibile con ASCII. La codifica dominante sul Web.
Codifica a larghezza variabile che usa 2 o 4 byte per carattere. Usato internamente da Windows, Java e le stringhe JavaScript.
Codifica a larghezza fissa: sempre 4 byte per carattere. Raramente visto sul Web.
Perché UTF-8 ha vinto
UTF-8 è diventato dominante perché è retro-compatibile con ASCII, auto-sincronizzante e spazio-efficiente per il testo latino. Qualsiasi documento ASCII è un documento UTF-8 valido.
Codifica Base64
Base64 converte i dati binari in una rappresentazione testuale usando solo 64 caratteri ASCII stampabili. È necessario quando i dati binari devono viaggiare attraverso canali solo testuali.
Come funziona
Base64 raggruppa i byte di input in blocchi da 3 byte e codifica ogni blocco come 4 caratteri Base64. Se l'input non è un multiplo di 3 byte, vengono aggiunti caratteri di padding =:
| Input | Byte hex | Base64 |
|---|---|---|
| "Man" | 77 61 6E | TWFu |
| "Ma" | 4D 61 | TWE= |
| "M" | 4D | TQ== |
I caratteri = di padding indicano quanti byte mancavano per completare l'ultimo gruppo da 3 byte. Il Base64 standard produce sempre output con lunghezza multipla di 4.
Codifica URL
Gli URL possono contenere solo un insieme limitato di caratteri ASCII sicuri. Qualsiasi carattere al di fuori di tale insieme deve essere codificato in percentuale.
La codifica percentuale sostituisce ogni byte non sicuro con % seguito da due cifre esadecimali che rappresentano il valore di quel byte.
Caratteri comunemente codificati
| Carattere | Codificato | Note |
|---|---|---|
| Space | %20 | Il più comune; usato negli invii di moduli come + in application/x-www-form-urlencoded |
| & | %26 | Separatore di query string; deve essere codificato quando usato come valore letterale |
| = | %3D | Separatore chiave-valore nelle query string; codificare come dato |
| + | %2B | Interpretato come spazio in application/x-www-form-urlencoded; codificare per preservare + |
| # | %23 | Identificatore di frammento; codificare come dati letterali in un percorso o query |
| / | %2F | Separatore di segmento di percorso; codificare come dati letterali |
| : | %3A | Separatore di schema; codificare nei contesti di percorso e query |
| @ | %40 | Usato in mailto: e auth; codificare come dati letterali |
encodeURI vs encodeURIComponent
JavaScript fornisce due funzioni di codifica con portate diverse. encodeURI codifica un URL completo. encodeURIComponent codifica un componente URL — codifica tutti i caratteri eccetto A-Z, a-z, 0-9, -, _, ., ~.
Dove la codifica appare nello sviluppo Web
L'intestazione Authorization: Basic codifica le credenziali come Base64(utente:password). È codifica per comodità di trasporto, NON sicurezza. Usa sempre HTTPS con Basic Auth.
Gli URI dati incorporano il contenuto del file direttamente in HTML o CSS: data:image/png;base64,.... Questo elimina le richieste HTTP.
La posta elettronica era progettata per l'ASCII a 7 bit. Gli allegati binari vengono codificati in Base64 da MIME prima della trasmissione.
I token JWT usano la codifica Base64url per tutte e tre le parti, rendendoli sicuri per gli URL.
Qualsiasi dato fornito dall'utente nelle query string URL deve essere codificato in percentuale.
I nomi di dominio non ASCII vengono codificati con Punycode (prefisso xn--) per la compatibilità con il sistema DNS.
Domande frequenti
No. Base64 è codifica, non crittografia. È una trasformazione reversibile senza chiave segreta.
Base64 elabora l'input in gruppi da 3 byte. Se l'input non è un multiplo di 3, viene aggiunto padding =.
Base64url è una variante sicura per URL che sostituisce + con - e / con _, e di solito omette il padding =. I JWT usano Base64url.
Usa encodeURIComponent per valori individuali. Usa encodeURI per una stringa URL completa dove vuoi preservare i caratteri di struttura URL.
UTF-8 è compatibile con ASCII ed efficiente per il testo latino. HTTP e HTML usano UTF-8 per impostazione predefinita.
La codifica percentuale rappresenta i caratteri come % seguito dal loro valore di byte esadecimale. Uno spazio è %20.
Base64 aumenta la dimensione dei dati di ~33% e aggiunge overhead CPU. La codifica URL aggiunge un overhead minimo.
Punycode è una codifica per rappresentare caratteri Unicode nel sistema DNS compatibile con ASCII.