[GUIDA] 8 min di lettura

[GUIDA] Riferimento Completo Base64

Tutto quello che devi sapere sulla codifica Base64: teoria, implementazione e migliori pratiche.

Gennaio 2025 | fundamentals

// COS'È BASE64?

Base64 è uno schema di codifica binario-to-testo che rappresenta dati binari usando 64 caratteri ASCII. È progettato per codificare dati binari che devono essere memorizzati e trasferiti su supporti progettati per dati testuali.

Il set di caratteri Base64 include A-Z, a-z, 0-9, e due caratteri aggiuntivi (tipicamente + e /), più = per il padding.

// COME FUNZIONA BASE64

La codifica Base64 funziona prendendo dati binari e convertendoli in una stringa di caratteri ASCII. Il processo prevede:

1. Dividere l'input in blocchi di 6 bit (Base64 usa 6 bit per carattere) 2. Mappare ogni valore di 6 bit a un carattere nell'alfabeto Base64 3. Aggiungere padding con caratteri '=' se necessario

// Esempio: Codifica 'Man' in Base64
// 'M' = 01001101, 'a' = 01100001, 'n' = 01101110
// Combinato: 010011010110000101101110
// Diviso in gruppi di 6 bit: 010011 010110 000101 101110
// Valori decimali: 19, 22, 5, 46
// Caratteri Base64: T, W, F, u
// Risultato: 'TWFu'

// CASI D'USO COMUNI

  • > Incorporare immagini in HTML/CSS (data URI)
  • > Codificare dati binari per API JSON
  • > Allegati email (codifica MIME)
  • > Memorizzare dati binari nei database
  • > Token di autenticazione e chiavi API
  • > Trasmissione dati sicura per URL

// IMPLEMENTAZIONE JAVASCRIPT

I browser moderni forniscono funzioni integrate per la codifica e decodifica Base64:

Per codificare testo in Base64, usa btoa() (binary to ASCII). Per decodificare Base64 in testo, usa atob() (ASCII to binary).

// Codificare testo in Base64
const text = 'Ciao, Mondo!';
const encoded = btoa(text);
console.log(encoded); // Q2lhbywgTW9uZG8h

// Decodificare Base64 in testo
const decoded = atob(encoded);
console.log(decoded); // Ciao, Mondo!

// Per stringhe Unicode, usa TextEncoder/TextDecoder
const encoder = new TextEncoder();
const decoder = new TextDecoder();

const unicodeText = 'Ciao, 世界!';
const bytes = encoder.encode(unicodeText);
const base64 = btoa(String.fromCharCode(...bytes));
console.log(base64);

// CONSIDERAZIONI SULLA SICUREZZA

Base64 NON è crittografia o sicurezza. È semplicemente codifica per la rappresentazione dei dati. Note importanti sulla sicurezza:

Non usare mai Base64 da solo per la protezione di dati sensibili. Valida sempre l'input Base64 per prevenire attacchi di iniezione. Ricorda che Base64 aumenta la dimensione dei dati di circa il 33%.

  • > Base64 è facilmente reversibile - non fornisce sicurezza
  • > Valida e sanifica sempre l'input Base64
  • > Usa crittografia appropriata per dati sensibili
  • > Considera varianti Base64 sicure per URL per applicazioni web
  • > Attenzione agli attacchi padding oracle in alcuni contesti

// MIGLIORI PRATICHE

  • > Usa Base64 sicuro per URL per applicazioni web (sostituisci + con -, / con _)
  • > Gestisci sempre il padding correttamente
  • > Valida lunghezza e caratteri dell'input
  • > Considera la compressione prima della codifica per dati grandi
  • > Usa streaming per set di dati molto grandi
  • > Implementa gestione errori appropriata per input non valido