Alternative e Casi Avanzati
Base32: Usa solo A-Z e 2-7 (32 caratteri), più sicuro per sistemi case-insensitive (Windows filesystem). Usato in: Google Authenticator TOTP codes, Bittorrent magnet links. Overhead 60% (vs 33% di Base64).
Base85 (Ascii85): usa 85 caratteri stampabili (da !, ASCII 33, a u, ASCII 117) e codifica 4 byte con 5 caratteri, quindi un overhead del 25% contro il 33% di Base64: è più efficiente perché 85⁵ è il più piccolo n⁵ ≥ 2³² necessario a rappresentare 4 byte. Usato in PostScript, PDF e nei patch binari di Git. È meno diffuso del Base64 e include molti caratteri di punteggiatura: nella variante Adobe il blocco è racchiuso fra i delimitatori <~ e ~>, il che lo rende poco adatto a URL e nomi di file.
Data URIs e Performance: Includere troppe immagini Base64 in HTML/CSS aumenta il file size e rallenta parsing. Limite consigliato: <5KB per immagine, max 2-3 images. Per file grandi, usa hosting separato + HTTP/2 multiplexing.
JWT Structure: Un JWT ha 3 parti separate da punti:
- Header:
{"alg":"HS256","typ":"JWT"} codificato - Payload: Claims (user ID, expiration, ecc.) codificati
- Signature: HMAC-SHA256(header+payload, secret)
MIME Types con Data URI: Specifica sempre il MIME type corretto:
- PNG:
data:image/png;base64,... - SVG:
data:image/svg+xml;base64,... - PDF:
data:application/pdf;base64,... - JSON:
data:application/json;base64,...
Quando NON usare Base64: File grandi (>100KB) perché aumentano del 33% e rallentano caricamento pagina. Video/audio (usa streaming HTTP invece). Dati già testuali (JSON, XML, CSV già sono testo, non serve encoding).
💡 Tip Sicurezza: Se codifichi dati user-generated in Base64 per includerli in HTML, DEVI comunque sanitizzare l'input prima! Un attaccante potrebbe inserire<script> tags codificati che, dopo il decode, causano XSS. Base64 non protegge da injection attacks.