Comment encoder en Base64URL
- Saisissez ou collez le texte dans Entrée · texte.
- Copiez le Base64URL depuis Sortie · Base64. URL-safe (- _) et Sans remplissage (=) sont déjà cochés sur cette page.
- Si le destinataire veut le remplissage, décochez Sans remplissage (=). S’il veut du Base64 standard, décochez aussi URL-safe, ou utilisez l’encodeur Base64.
- Copiez la sortie ou téléchargez-la sous
base64.txt.
Décodez une valeur avec le décodeur Base64URL. Base64 en Base64URL convertit des chaînes existantes d’un alphabet à l’autre.
Ce qui change par rapport au Base64 standard
Seuls trois caractères diffèrent. Tout le reste, y compris la règle 3 octets pour 4 caractères, reste identique :
| Base64 standard | Base64URL | |
|---|---|---|
| Valeur 62 | + | - |
| Valeur 63 | / | _ |
| Remplissage | = obligatoire | généralement omis |
| Défini dans | RFC 4648, section 4 | RFC 4648, section 5 |
Pour beaucoup de chaînes courtes, les deux variantes ne diffèrent que par le remplissage. La différence d’alphabet apparaît dès qu’un groupe de 6 bits vaut 62 ou 63, ce que produisent des caractères comme ? et > et beaucoup d’octets non ASCII :
| Entrée | Standard | Base64URL, sans remplissage |
|---|---|---|
Hi! | SGkh | SGkh |
?>?> | Pz4/Pg== | Pz4_Pg |
subjects?_d | c3ViamVjdHM/X2Q= | c3ViamVjdHM_X2Q |
https://example.com/?q=1 | aHR0cHM6Ly9leGFtcGxlLmNvbS8/cT0x | aHR0cHM6Ly9leGFtcGxlLmNvbS8_cT0x |
Base64 ou Base64URL revient plus en détail sur l’historique et les différences de décodage.
Pourquoi les URL ont besoin de leur propre alphabet
Chacun des trois caractères standard a un sens dans une URL. / sépare les segments du chemin, = sépare noms et valeurs dans une query string, et + est lu comme une espace par les décodeurs de formulaires. Une valeur Base64 standard comme a+b/c== dans un paramètre de requête arrive sous la forme a b/c== si chaque caractère n’a pas été échappé. L’encodage pourcent règle le problème, mais transforme chacun d’eux en trois caractères (%2B, %2F, %3D).
Le Base64URL choisit deux caractères non réservés dans les URL et supprime le remplissage : une valeur peut ainsi être collée telle quelle dans un chemin, une query string, un fragment, un cookie ou un nom de fichier. - et _ sont aussi sans risque dans les noms de fichiers sur tous les systèmes de fichiers courants, contrairement à /.
Où le Base64URL est utilisé
- JWT et JOSE. Chaque partie d’un JSON Web Token est en Base64URL sans remplissage, comme le définit la RFC 7515. Le décodeur JWT lit les jetons ; Base64 dans les JWT explique la structure.
- OAuth PKCE. Le
code_challengeest le Base64URL du hachage SHA-256 ducode_verifier. - WebAuthn et passkeys. Les identifiants de credentials et les challenges circulent en Base64URL dans du JSON.
- Liens et identifiants. Les liens de partage, les paramètres d’URL signés et les identifiants courts construits à partir d’octets aléatoires l’utilisent pour garder des URL propres.
Le Base64URL dans le code
Node.js dispose d’un encodage base64url intégré, et Python d’une fonction URL-safe dont vous retirez vous-même le remplissage :
// Node.js
Buffer.from("subjects?_d").toString("base64url"); // "c3ViamVjdHM_X2Q"
// Browsers with Uint8Array.prototype.toBase64
new TextEncoder().encode("subjects?_d").toBase64({ alphabet: "base64url", omitPadding: true });
import base64, hashlib
base64.urlsafe_b64encode(b"subjects?_d").rstrip(b"=").decode() # 'c3ViamVjdHM_X2Q'
# PKCE code_challenge, example from RFC 7636 appendix B
verifier = "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk"
digest = hashlib.sha256(verifier.encode("ascii")).digest()
base64.urlsafe_b64encode(digest).rstrip(b"=").decode()
# 'E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM'
Plus de détails dans Base64 en Node.js, JavaScript et Python, et sur l’API du navigateur dans Uint8Array.toBase64.
FAQ
Qu'est-ce que le Base64URL ?
La variante de Base64 sûre pour les URL et les noms de fichiers, définie dans la RFC 4648, section 5. Elle utilise - et _ comme deux derniers caractères de l’alphabet au lieu de + et /, et s’écrit généralement sans remplissage =.
Pourquoi ne pas simplement encoder en pourcent du Base64 normal ?
Cela fonctionne, mais coûte trois caractères pour chaque +, / et =, et un échappement oublié transforme + en espace lors de l’analyse de la query string. Le Base64URL évite ces deux problèmes.
Faut-il garder le remplissage = ?
Les JWT et la plupart des formats URL-safe l’omettent, car = doit lui aussi être échappé dans les URL et le décodeur peut déduire le remplissage de la longueur. Ne le gardez que si le système destinataire l’exige : décochez Sans remplissage.
Comment créer un code_challenge PKCE ?
Hachez le code_verifier en SHA-256 et encodez les 32 octets du hachage en Base64URL sans remplissage. Cette page encode du texte, pas des octets de hachage : faites-le dans le code ; l’extrait ci-dessous reproduit l’exemple de la RFC 7636.