Encodeur/Décodeur Base64URL

Encoder et décoder Base64 URL-safe (Base64url)

Texte brut

Base64

Fonctionne localement · Sûr pour coller des secrets
Sortie Base64...

Qu'est-ce que l'encodage Base64url ?

Base64url est une variante de l'encodage Base64 conçue spécifiquement pour les URL, les noms de fichiers et d'autres contextes où les caractères + et / du Base64 standard posent problème. Défini dans la RFC 4648 Section 5, Base64url remplace + par - (tiret) et / par _ (underscore), et omet les caractères de rembourrage = finaux. Le résultat est une chaîne qui peut être intégrée directement dans un paramètre de requête URL, un nom de fichier ou un en-tête HTTP sans nécessiter d'encodage en pourcentage supplémentaire.

Le Base64 standard (RFC 4648 Section 4) utilise 64 caractères : A-Z, a-z, 0-9, + et /. Les caractères + et / sont réservés dans les URL : + est interprété comme une espace dans les chaînes de requête (application/x-www-form-urlencoded), et / est un délimiteur de chemin. Utiliser du Base64 standard dans une URL nécessite donc d'encoder ces caractères en pourcentage (%2B, %2F), ce qui allonge la chaîne et la rend moins lisible. Base64url élimine ce problème en utilisant des caractères sûrs pour les URL dès le départ.

L'usage le plus répandu de Base64url est dans les JSON Web Tokens (JWT). Les trois segments d'un JWT — en-tête, charge utile et signature — sont encodés en Base64url. Les vérificateurs de code PKCE OAuth 2.0, les valeurs de challenge WebAuthn et de nombreux schémas de tokens API s'appuient également sur Base64url. Comprendre cet encodage est essentiel pour tout développeur qui travaille avec l'authentification, l'autorisation ou l'échange de données cryptographiques.

Pourquoi utiliser cet outil Base64url ?

Convertissez entre Base64url et du texte ou des données binaires directement dans votre navigateur. L'encodage et le décodage sont tous deux pris en charge, avec gestion automatique du rembourrage et de la substitution de caractères. Que vous déboguiez un token JWT, génériez un code challenge PKCE ou construisiez des identifiants sûrs pour les URL, cet outil traite tout localement dans votre navigateur sans aucune latence.

Conversion instantanée
Le résultat se met à jour au fil de la saisie. Encodez du texte en Base64url ou décodez du Base64url en texte sans délai — sans soumission de formulaire ni rechargement de page.
🔗
Sortie sûre pour les URL
La sortie utilise uniquement des caractères sûrs dans les URL, les noms de fichiers et les en-têtes HTTP : A-Z, a-z, 0-9, tiret et underscore. Aucun encodage en pourcentage nécessaire.
🔒
Traitement respectueux de la vie privée
Tout l'encodage et le décodage s'exécutent localement dans votre navigateur. Les tokens JWT, les secrets OAuth et les clés API que vous collez ici ne sont jamais transmis à un serveur.
🏛️
Conforme aux standards
Implémente exactement la RFC 4648 Section 5 : - et _ remplacent + et /, le rembourrage est omis. Compatible avec les bibliothèques JWT, OAuth 2.0 PKCE et les implémentations WebAuthn.

Cas d'usage de Base64url

Inspection de tokens JWT
Décodez les segments JWT individuels (en-tête, charge utile) pour inspecter les claims, les dates d'expiration et les algorithmes de signature sans importer une bibliothèque JWT ni vérifier la signature.
Flux OAuth 2.0 PKCE
Générez et vérifiez les valeurs code_verifier et code_challenge PKCE. La méthode code_challenge_method S256 requiert un hash SHA-256 du code_verifier encodé en Base64url.
Intégration WebAuthn / FIDO2
Le challenge WebAuthn, l'identifiant de credential et les données d'attestation sont transmis sous forme de chaînes Base64url entre le navigateur et le serveur de confiance. Décodez-les pour déboguer les flux d'enregistrement et d'authentification.
Génération de tokens API
Créez des tokens sûrs pour les URL à partir d'octets aléatoires pour les liens de réinitialisation de mot de passe, la vérification d'e-mail et les identifiants de session. Base64url produit des chaînes compactes qui fonctionnent dans les URL sans échappement.
Pipelines DevOps et CI/CD
Stockez des valeurs de configuration binaires (certificats, clés) sous forme de chaînes Base64url dans des variables d'environnement ou des fichiers YAML. Contrairement au Base64 standard, la sortie ne contient aucun caractère qui entre en conflit avec l'expansion shell ou la syntaxe YAML.
Ingénierie des données
Encodez des identifiants binaires, des hachages ou des sommes de contrôle en Base64url pour les utiliser dans des noms de fichiers, des clés de base de données ou des colonnes CSV où les caractères + et / casseraient l'analyse ou nécessiteraient un échappement.

Base64 standard vs Base64url

Base64url diffère du Base64 standard en exactement trois points. L'algorithme d'encodage est identique — seuls l'alphabet et le comportement du rembourrage changent :

CaractéristiqueStandard (RFC 4648 §4)Base64url (RFC 4648 §5)
Index 62+-
Index 63/_
Padding= (required)Omitted

Ces trois différences signifient que la conversion entre Base64 standard et Base64url est triviale : remplacez + par -, / par _, et supprimez les caractères = finaux. Dans le sens inverse, remplacez - par +, _ par /, et rajoutez le rembourrage pour que la longueur soit un multiple de 4. La plupart des langages offrent un support natif de Base64url, rendant la conversion manuelle inutile.

Tableau de comparaison d'encodage

Le tableau ci-dessous montre les mêmes entrées encodées avec Base64 standard et Base64url. Notez comment les caractères de rembourrage (=) sont supprimés et + / / sont remplacés par - / _ dans la variante URL-safe :

EntréeBase64 standardBase64url (sans rembourrage)
HelloSGVsbG8=SGVsbG8
AQQ==QQ
1+1=2MSsxPTI=MSsxPTI
subject?ref=1c3ViamVjdD9yZWY9MQ==c3ViamVjdD9yZWY9MQ
👍 (thumbs up)8J+RjQ==8J-RjQ

Exemples de code

Comment encoder et décoder des chaînes Base64url dans les langages courants. Chaque exemple produit une sortie sûre pour les URL, les noms de fichiers et les en-têtes 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!"
}

Questions fréquentes

Quelle est la différence entre Base64 et Base64url ?
Base64url remplace + par - et / par _ de l'alphabet Base64 standard, et omet les caractères de rembourrage = finaux. Cela rend la sortie sûre pour les URL, les paramètres de requête, les noms de fichiers et les en-têtes HTTP sans encodage supplémentaire. L'algorithme sous-jacent (découpage des octets en groupes de 6 bits mappés sur des caractères ASCII) est identique.
Pourquoi les tokens JWT utilisent-ils Base64url plutôt que Base64 standard ?
Les JWT sont fréquemment transmis dans des paramètres de requête URL et des en-têtes HTTP Authorization. Les caractères + et / du Base64 standard devraient être encodés en pourcentage dans les URL, augmentant la longueur et cassant les comparaisons de chaînes simples. La spécification JWT (RFC 7519) impose Base64url sans rembourrage pour garantir que les tokens sont compacts et sûrs pour les URL par défaut.
Comment convertir du Base64 standard en Base64url ?
Remplacez chaque + par -, chaque / par _, et supprimez tous les caractères = finaux. En JavaScript : base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''). En Python : base64.urlsafe_b64encode(data).rstrip(b'='). La plupart des langages modernes proposent également une fonction d'encodage Base64url dédiée. Cette conversion est également nécessaire lors de l'intégration de bibliothèques anciennes produisant du Base64 standard avec des systèmes modernes attendant du Base64url.
L'encodage Base64url est-il réversible ?
Oui, Base64url est entièrement réversible. Pour décoder, remplacez - par + et _ par /, rajoutez les caractères de rembourrage = pour que la longueur soit un multiple de 4, puis décodez comme du Base64 standard. La sortie décodée est octet pour octet identique à l'entrée originale.
Puis-je utiliser Base64url pour chiffrer des données ?
Non. Base64url est un encodage, pas un chiffrement. Il transforme des données binaires en un format textuel sans aucune confidentialité — n'importe qui peut le décoder. Si vous devez protéger des données, chiffrez-les d'abord avec un algorithme approprié (AES, ChaCha20), puis encodez le texte chiffré en Base64url pour le transport.
Pourquoi le rembourrage est-il omis dans Base64url ?
Les caractères de rembourrage (=) n'ont aucune utilité quand le décodeur peut calculer le nombre d'octets manquants à partir de la longueur de la chaîne : (4 - length % 4) % 4 donne le rembourrage nécessaire. Omettre le rembourrage raccourcit la chaîne et évite les caractères =, qui devraient être encodés en pourcentage dans les URL. La RFC 4648 Section 5 autorise explicitement l'omission du rembourrage dans Base64url.
Comment gérer les chaînes Base64url avec rembourrage dans mon code ?
Certains systèmes produisent des chaînes Base64url qui conservent le rembourrage =. La plupart des décodeurs le gèrent correctement. Si le vôtre ne le fait pas, supprimez les = finaux avant de décoder. Inversement, si une bibliothèque requiert du rembourrage, calculez-le et ajoutez-le : const padded = str + '='.repeat((4 - str.length % 4) % 4). Cela fonctionne car le nombre de caractères de rembourrage est déterministe à partir de la longueur de la chaîne.