Codificatore/Decodificatore Base64URL

Codifica e decodifica Base64 URL-safe (Base64url)

Testo Normale

Base64

Esegue in locale · Sicuro per incollare segreti
Output Base64...

Cos'è la codifica Base64url?

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:

CaratteristicaStandard (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:

InputBase64 standardBase64url (senza padding)
HelloSGVsbG8=SGVsbG8
AQQ==QQ
1+1=2MSsxPTI=MSsxPTI
subject?ref=1c3ViamVjdD9yZWY9MQ==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:

JavaScript (browser)
// Encode to Base64url
function toBase64url(str) {
  return btoa(unescape(encodeURIComponent(str)))
    .replace(/\+/g, '-')
    .replace(/\//g, '_')
    .replace(/=+$/, '')
}
toBase64url('Hello!') // → "SGVsbG8h"

// Decode from Base64url
function fromBase64url(b64url) {
  const b64 = b64url.replace(/-/g, '+').replace(/_/g, '/')
  const pad = (4 - b64.length % 4) % 4
  return decodeURIComponent(escape(atob(b64 + '='.repeat(pad))))
}
fromBase64url('SGVsbG8h') // → "Hello!"
Node.js
// Native base64url support since Node 15.7
const encoded = Buffer.from('Hello!').toString('base64url')
// → "SGVsbG8h"

const decoded = Buffer.from('SGVsbG8h', 'base64url').toString()
// → "Hello!"

// Decode a JWT payload
const jwt = 'eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0...'
const payload = JSON.parse(Buffer.from(jwt.split('.')[1], 'base64url').toString())
// → { sub: "1234567890" }
Python
import base64

# Encode to Base64url (no padding)
encoded = base64.urlsafe_b64encode(b'Hello!').rstrip(b'=').decode()
# → "SGVsbG8h"

# Decode from Base64url (re-add padding)
def b64url_decode(s: str) -> bytes:
    s += '=' * (4 - len(s) % 4)  # restore padding
    return base64.urlsafe_b64decode(s)

b64url_decode('SGVsbG8h')  # → b'Hello!'
Go
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.