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:

ASCII1963
128 caratteri

Codice standard americano a 7 bit. 128 caratteri: lettere inglesi, cifre, punteggiatura e codici di controllo.

Latin-11987
256 caratteri

ASCII esteso per le lingue dell'Europa occidentale. Aggiunge 128 caratteri. Non adatto agli script non latini.

Unicode1991
149 186+ caratteri

Set di caratteri universale che copre tutti i sistemi di scrittura del mondo. Definisce code point per oltre 149.000 caratteri.

UTF-81993
Tutto Unicode caratteri

Codifica a larghezza variabile di Unicode che usa da 1 a 4 byte per carattere. Compatibile con ASCII. La codifica dominante sul Web.

UTF-161996
Tutto Unicode caratteri

Codifica a larghezza variabile che usa 2 o 4 byte per carattere. Usato internamente da Windows, Java e le stringhe JavaScript.

UTF-322000
Tutto Unicode caratteri

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 =:

InputByte hexBase64
"Man"77 61 6ETWFu
"Ma"4D 61TWE=
"M"4DTQ==

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

CarattereCodificatoNote
Space%20Il più comune; usato negli invii di moduli come + in application/x-www-form-urlencoded
&%26Separatore di query string; deve essere codificato quando usato come valore letterale
=%3DSeparatore chiave-valore nelle query string; codificare come dato
+%2BInterpretato come spazio in application/x-www-form-urlencoded; codificare per preservare +
#%23Identificatore di frammento; codificare come dati letterali in un percorso o query
/%2FSeparatore di segmento di percorso; codificare come dati letterali
:%3ASeparatore di schema; codificare nei contesti di percorso e query
@%40Usato 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

Autenticazione HTTP di base

L'intestazione Authorization: Basic codifica le credenziali come Base64(utente:password). È codifica per comodità di trasporto, NON sicurezza. Usa sempre HTTPS con Basic Auth.

URI dati

Gli URI dati incorporano il contenuto del file direttamente in HTML o CSS: data:image/png;base64,.... Questo elimina le richieste HTTP.

Allegati email MIME

La posta elettronica era progettata per l'ASCII a 7 bit. Gli allegati binari vengono codificati in Base64 da MIME prima della trasmissione.

Token JWT

I token JWT usano la codifica Base64url per tutte e tre le parti, rendendoli sicuri per gli URL.

Parametri di query string

Qualsiasi dato fornito dall'utente nelle query string URL deve essere codificato in percentuale.

Nomi di dominio internazionalizzati

I nomi di dominio non ASCII vengono codificati con Punycode (prefisso xn--) per la compatibilità con il sistema DNS.

Domande frequenti

Base64 è una forma di crittografia?

No. Base64 è codifica, non crittografia. È una trasformazione reversibile senza chiave segreta.

Perché l'output Base64 finisce a volte con ==?

Base64 elabora l'input in gruppi da 3 byte. Se l'input non è un multiplo di 3, viene aggiunto padding =.

Qual è la differenza tra Base64 e Base64url?

Base64url è una variante sicura per URL che sostituisce + con - e / con _, e di solito omette il padding =. I JWT usano Base64url.

Quando usare encodeURI vs encodeURIComponent?

Usa encodeURIComponent per valori individuali. Usa encodeURI per una stringa URL completa dove vuoi preservare i caratteri di struttura URL.

Perché UTF-8 è meglio di UTF-16 per il Web?

UTF-8 è compatibile con ASCII ed efficiente per il testo latino. HTTP e HTML usano UTF-8 per impostazione predefinita.

Cos'è la codifica percentuale?

La codifica percentuale rappresenta i caratteri come % seguito dal loro valore di byte esadecimale. Uno spazio è %20.

La codifica influisce sulle prestazioni?

Base64 aumenta la dimensione dei dati di ~33% e aggiunge overhead CPU. La codifica URL aggiunge un overhead minimo.

Cos'è Punycode?

Punycode è una codifica per rappresentare caratteri Unicode nel sistema DNS compatibile con ASCII.