Codifica e decodifica Base64

Codifica testo in Base64 o decodifica Base64 in testo, con pieno supporto UTF-8 e un'opzione URL-safe.

Funziona al 100% nel tuo browser. Nulla di ciò che incolli viene caricato o salvato.
Testo o Base64
Risultato
Pronto.

Come codificare e decodificare in Base64

  1. Scegli Codifica per trasformare il testo in Base64, oppure Decodifica per riportare il Base64 a testo.
  2. Incolla il tuo input. Il testo viene trattato come UTF-8, quindi lettere accentate, alfabeti non latini ed emoji funzionano correttamente.
  3. Attiva l'opzione URL-safe se il risultato va inserito in un URL, in un nome di file o in un JWT.
  4. Copia l'output.

Codifica e decodifica avvengono in locale nel tuo browser; nulla di ciò che incolli viene caricato o salvato.

Come funziona il Base64

Il Base64, definito nella RFC 4648, rappresenta dati binari arbitrari con 64 caratteri ASCII stampabili: A–Z, a–z, 0–9, + e /. Esiste perché i contenuti binari possano viaggiare in sicurezza attraverso sistemi pensati per il testo, come email, JSON, XML e header HTTP.

L'algoritmo prende l'input 3 byte (24 bit) alla volta e li divide in quattro gruppi da 6 bit. Ogni valore a 6 bit (0–63) seleziona un carattere dell'alfabeto. La parola Man mostra il procedimento:

PassaggioValore
ByteM=77, a=97, n=110
24 bit01001101 01100001 01101110
Gruppi da 6 bit010011 010110 000101 101110 = 19, 22, 5, 46
Base64TWFu

Poiché ogni 3 byte diventano 4 caratteri, l'output Base64 è circa il 33% più grande dell'input (più gli a capo, se un formato come MIME li inserisce).

Il padding con =

Quando la lunghezza dell'input non è un multiplo di tre, l'ultimo gruppo viene completato con il padding. Un byte avanzato produce due caratteri più ==; due byte avanzati producono tre caratteri più =. Per esempio, Hi diventa SGk=.

Base64 URL-safe

I caratteri standard + e / hanno un significato speciale negli URL e nei percorsi dei file. La RFC 4648 §5 definisce l'alfabeto base64url, che li sostituisce con - e _. Spesso il padding viene omesso. I JSON Web Token usano base64url senza padding.

Standard:  +/8=
URL-safe:  -_8

Errori comuni

Il Base64 non è crittografia

Chiunque può decodificare il Base64 all'istante; non c'è nessuna chiave. Non usarlo mai per "nascondere" password o chiavi API. Per i controlli di integrità usa un hash creato con il generatore di hash, e per la riservatezza usa una vera crittografia.

UTF-8 in JavaScript

La funzione integrata del browser btoa() accetta solo caratteri dell'intervallo Latin-1 e genera un errore per tutto il resto. Converti prima il testo in byte UTF-8:

btoa("✓");   // InvalidCharacterError

const bytes = new TextEncoder().encode("✓");
btoa(String.fromCharCode(...bytes));   // "4pyT"

Mescolare gli alfabeti

La decodifica di dati base64url con un decodificatore standard rigoroso fallisce su - e _, oppure se manca il padding. Converti l'alfabeto e aggiungi di nuovo il padding fino a un multiplo di quattro caratteri prima di decodificare.

Dove incontrerai il Base64

  • Data URI, che incorporano piccoli file direttamente in HTML o CSS: data:image/png;base64,iVBORw0KGgo...
  • L'autenticazione HTTP Basic invia username:password codificati in Base64. user:pass diventa Authorization: Basic dXNlcjpwYXNz, che si inverte banalmente, quindi la Basic auth va usata solo su HTTPS. Puoi esaminare questi header con il verificatore di header HTTP.
  • Allegati email (MIME) e certificati e chiavi PEM.
  • I JWT, il cui header e payload sono JSON codificati in base64url. Usa il decoder JWT per leggerli.
Suggerimento: da riga di comando, printf 'text' | base64 codifica e base64 -d decodifica (le versioni meno recenti di macOS usano -D). Usa printf o echo -n per non codificare anche un a capo finale.

Domande frequenti

Perché la mia stringa Base64 finisce con = o ==?

È il padding. Indica al decodificatore quanti byte conteneva l'ultimo gruppo quando la lunghezza dell'input non era divisibile per tre.

Il Base64 è sicuro?

No. È una codifica, non una crittografia. Non offre alcuna riservatezza; serve solo a rendere i dati binari sicuri da trasportare come testo.

Perché l'output codificato è più grande dell'input?

Ogni carattere Base64 trasporta 6 bit invece di 8, quindi 3 byte di input richiedono 4 caratteri di output, un sovraccarico di circa un terzo.

Qual è la differenza tra Base64 e base64url?

Cambiano solo due caratteri: base64url usa - e _ invece di + e /, e di solito elimina il padding =, così il risultato può essere inserito negli URL senza ulteriori escape.

Aggiornato

Copiato negli appunti