Base64url è una variante della codifica Base64 progettata specificamente per l'uso in URL, nomi di file e altri contesti in cui i caratteri standard Base64 + e / creano problemi. Definita nella RFC 4648 Sezione 5, Base64url sostituisce + con - (trattino) e / con _ (underscore), e omette i caratteri di padding = finali. Il risultato è una stringa che può essere incorporata direttamente in un parametro di query URL, un nome di file o un header HTTP senza richiedere ulteriore percent-encoding.
Il Base64 standard (RFC 4648 Sezione 4) utilizza 64 caratteri: A-Z, a-z, 0-9, + e /. I caratteri + e / sono riservati negli URL: + viene interpretato come spazio nelle query string (application/x-www-form-urlencoded), e / è un delimitatore di percorso. Usare Base64 standard all'interno di un URL richiede quindi la percent-encoding di questi caratteri (%2B, %2F), il che aumenta la lunghezza della stringa e la rende più difficile da leggere. Base64url elimina completamente questo problema usando dall'inizio caratteri sicuri per gli URL.
L'uso più importante di Base64url è nei JSON Web Token (JWT). Tutti e tre i segmenti di un JWT — header, payload e firma — sono codificati in Base64url. I code verifier OAuth 2.0 PKCE, i valori challenge WebAuthn e molti schemi di token API fanno anch'essi affidamento su Base64url. Comprendere questa codifica è essenziale per qualsiasi sviluppatore che lavora con autenticazione, autorizzazione o scambio di dati crittografici.
Perché usare questo strumento Base64url?
Converti tra Base64url e testo o dati binari direttamente nel tuo browser. Sono supportate sia la codifica che la decodifica, con gestione automatica del padding e della sostituzione dei caratteri. Che tu stia analizzando un token JWT, generando un code challenge PKCE o costruendo identificatori sicuri per URL, questo strumento elabora tutto localmente nel tuo browser con latenza zero e senza alcun round-trip verso il server.
⚡
Conversione istantanea
L'output si aggiorna mentre digiti. Codifica testo in Base64url o decodifica Base64url in testo senza alcun ritardo — senza invii di form o ricaricamenti di pagina.
🔗
Output sicuro per URL
L'output usa solo caratteri sicuri in URL, nomi di file e header HTTP: A-Z, a-z, 0-9, trattino e underscore. Nessuna percent-encoding necessaria.
🔒
Elaborazione privacy-first
Tutta la codifica e la decodifica avviene localmente nel tuo browser. I token JWT, i segreti OAuth e le chiavi API che incolli qui non vengono mai trasmessi ad alcun server.
🏛️
Conforme agli standard
Implementa esattamente la RFC 4648 Sezione 5: - e _ sostituiscono + e /, il padding viene omesso. Compatibile con librerie JWT, OAuth 2.0 PKCE e implementazioni WebAuthn.
Casi d'uso di Base64url
Ispezione di token JWT
Decodifica i singoli segmenti JWT (header, payload) per ispezionare claim, tempi di scadenza e algoritmi di firma senza importare una libreria JWT o verificare la firma.
Flusso OAuth 2.0 PKCE
Genera e verifica i valori code_verifier e code_challenge PKCE. Il metodo code_challenge_method S256 richiede un hash SHA-256 del code_verifier codificato in Base64url.
Integrazione WebAuthn / FIDO2
I dati di challenge, credential ID e attestation di WebAuthn vengono trasmessi come stringhe Base64url tra il browser e il server relying party. Decodificali per il debug dei flussi di registrazione e autenticazione.
Generazione di token API
Crea token sicuri per URL da byte casuali per link di reimpostazione password, verifica email e identificatori di sessione. Base64url produce stringhe compatte che funzionano negli URL senza escaping.
Pipeline DevOps e CI/CD
Memorizza valori di configurazione binari (certificati, chiavi) come stringhe Base64url in variabili d'ambiente o file YAML. A differenza del Base64 standard, l'output non contiene caratteri che creano conflitti con l'espansione della shell o la sintassi YAML.
Ingegneria dei dati
Codifica identificatori binari, hash o checksum in Base64url per l'uso in nomi di file, chiavi di database o colonne CSV dove i caratteri + e / romperebbero il parsing o richiederebbero escaping.
Base64 standard vs Base64url
Base64url differisce dal Base64 standard in esattamente tre modi. L'algoritmo di codifica è identico — cambiano solo l'alfabeto e il comportamento del padding:
Caratteristica
Standard (RFC 4648 §4)
Base64url (RFC 4648 §5)
Index 62
+
-
Index 63
/
_
Padding
= (required)
Omitted
Queste tre differenze significano che la conversione tra Base64 standard e Base64url è banale: sostituisci + con -, / con _, e rimuovi i caratteri = finali. Al contrario, sostituisci - con +, _ con /, e riaggiungi il padding per rendere la lunghezza un multiplo di 4. La maggior parte dei linguaggi offre supporto nativo a Base64url, rendendo la conversione manuale non necessaria. Entrambe le conversioni sono completamente reversibili e senza perdita di dati, preservando esattamente la sequenza di byte originale.
Tabella di confronto della codifica
La tabella seguente mostra gli stessi input codificati con Base64 standard e Base64url. Nota come i caratteri di padding (=) vengano rimossi e + / / vengano sostituiti con - / _ nella variante URL-safe:
Input
Base64 standard
Base64url (senza padding)
Hello
SGVsbG8=
SGVsbG8
A
QQ==
QQ
1+1=2
MSsxPTI=
MSsxPTI
subject?ref=1
c3ViamVjdD9yZWY9MQ==
c3ViamVjdD9yZWY9MQ
ð (thumbs up)
8J+RjQ==
8J-RjQ
Esempi di codice
Come codificare e decodificare stringhe Base64url nei linguaggi più diffusi. Ogni esempio produce output sicuro per l'uso in URL, nomi di file e header HTTP:
package main
import (
"encoding/base64"
"fmt"
)
func main() {
// Encode to Base64url (no padding)
encoded := base64.RawURLEncoding.EncodeToString([]byte("Hello!"))
fmt.Println(encoded) // → "SGVsbG8h"
// Decode from Base64url
decoded, _ := base64.RawURLEncoding.DecodeString("SGVsbG8h")
fmt.Println(string(decoded)) // → "Hello!"
}
Domande frequenti
Qual è la differenza tra Base64 e Base64url?
Base64url sostituisce + con - e / con _ dell'alfabeto Base64 standard, e omette i caratteri di padding = finali. Questo rende l'output sicuro per l'uso in URL, parametri di query, nomi di file e header HTTP senza codifica aggiuntiva. L'algoritmo sottostante (divisione dei byte in gruppi da 6 bit mappati a caratteri ASCII) è identico. In pratica, le stringhe Base64url possono comparire direttamente in URL e header HTTP senza alcuna modifica, mentre le stringhe Base64 standard richiedono la percent-encoding (%2B per +, %2F per /) in quei contesti.
Perché i token JWT usano Base64url invece del Base64 standard?
I JWT vengono spesso trasmessi in parametri di query URL e header HTTP Authorization. I caratteri Base64 standard + e / dovrebbero essere percent-encoded negli URL, aumentando la lunghezza e rompendo i confronti di stringhe semplici. La specifica JWT (RFC 7519) impone Base64url senza padding per garantire che i token siano compatti e sicuri per gli URL per impostazione predefinita.
Come si converte Base64 standard in Base64url?
Sostituisci ogni + con -, ogni / con _, e rimuovi tutti i caratteri = finali. In JavaScript: base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''). In Python: base64.urlsafe_b64encode(data).rstrip(b'='). La maggior parte dei linguaggi moderni fornisce anche una funzione di codifica Base64url dedicata. Questa conversione è comunemente necessaria quando si integrano librerie legacy che producono Base64 standard con sistemi moderni che si aspettano Base64url, come validatori JWT, server OAuth 2.0 e relying party WebAuthn.
La codifica Base64url è reversibile?
Sì, Base64url è completamente reversibile. Per decodificare, sostituisci - con + e _ con /, riaggiungi i caratteri di padding = per rendere la lunghezza un multiplo di 4, poi decodifica come Base64 standard. L'output decodificato è byte per byte identico all'input originale.
Posso usare Base64url per cifrare i dati?
No. Base64url è una codifica, non una cifratura. Trasforma i dati binari in un formato testuale sicuro senza alcuna segretezza — chiunque può decodificarlo. Se hai bisogno di proteggere i dati, cifrarli prima con un algoritmo appropriato (AES, ChaCha20), poi codifica il testo cifrato in Base64url per il trasporto.
Perché il padding viene omesso in Base64url?
I caratteri di padding (=) non servono quando il decoder può calcolare il conteggio dei byte mancanti dalla lunghezza della stringa: (4 - length % 4) % 4 fornisce il padding necessario. Omettere il padding rende la stringa più corta ed evita i caratteri =, che richiederebbero percent-encoding negli URL. La RFC 4648 Sezione 5 permette esplicitamente di omettere il padding in Base64url.
Come gestire le stringhe Base64url con padding nel codice?
Alcuni sistemi producono stringhe Base64url che mantengono il padding =. La maggior parte dei decoder gestisce questo correttamente. Se il tuo decoder non lo fa, rimuovi i = finali prima della decodifica. Al contrario, se una libreria richiede il padding, calcolalo e aggiungilo: const padded = str + '='.repeat((4 - str.length % 4) % 4). Funziona perché il conteggio del padding è deterministico dalla lunghezza della stringa.