Charger un fichier
  1. base64hub
  2. Outils web et jetons
  3. Base64 en Base64URL

Convertisseur Base64 en Base64URL (URL-safe)

Collez du Base64 standard pour obtenir la forme URL-safe : + devient -, / devient _, et le remplissage = est retiré, sauf si vous cochez Remplissage (=).

Gratuit sans inscription, sans limites Local rien n'est envoyé Mis à jour 27 oct. 2026
Entrée 0Octets 0 BSortie 0

Traité dans votre navigateur. Cette page ne peut envoyer vos données nulle part – comment le savons-nous

Comment convertir du Base64 en Base64URL

  1. Collez le Base64 dans Entrée · Base64. Les sauts de ligne d’un Base64 coupé en lignes et un préfixe data:...;base64, sont supprimés automatiquement.
  2. La chaîne URL-safe apparaît dans Sortie · Base64URL.
  3. Cochez Remplissage (=) sous la sortie si le destinataire veut garder les = finaux.
  4. Utilisez Copier la sortie. Le sélecteur Base64URL → Base64, ou la page Base64URL en Base64, fait la conversion inverse.

L’entrée est décodée en octets puis réencodée : une chaîne qui n’est pas du Base64 valide produit donc une erreur plutôt qu’un résultat à moitié converti.

Exemples

Base64Base64URLRemarque
PDw/Pz8+Pg==PDw_Pz8-Pg/ et + remplacés, == retiré
eyJyb2xlIjoiYWRtaW4+In0=eyJyb2xlIjoiYWRtaW4-In0JSON contenant un >, un = retiré
E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw+cM=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cMle challenge PKCE de la RFC 7636, annexe B
+/8=-_8les octets fb ff
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9inchangé : ni +, ni /, ni =

La dernière ligne est un cas fréquent. Un JSON court et du texte ASCII s’encodent souvent sans + ni /, et quand la longueur est un multiple de 3 octets il n’y a pas non plus de remplissage : les deux formes sont alors identiques. C’est aussi pourquoi une conversion oubliée peut passer inaperçue pendant les tests, jusqu’à ce qu’une valeur produise par hasard un + ou un /.

Les caractères du Base64 standard qui cassent les URL

Trois caractères du Base64 standard ont un sens particulier dans les URL :

  • + signifie une espace dans les query strings : ?t=a+b arrive donc sous la forme a b dans de nombreux frameworks.
  • / sépare les segments du chemin : du Base64 placé dans un chemin peut donc être découpé ou routé de travers.
  • = sépare le nom d’un paramètre de sa valeur et doit s’écrire %3D pour être sûr.

La section 5 de la RFC 4648 définit Base64URL pour ce cas, avec - et _ à la place de + et / et un remplissage facultatif. De telles valeurs n’ont besoin d’aucun échappement dans les chemins, les query strings, les cookies ou les noms de fichiers. L’article Base64 ou Base64URL entre dans les détails.

Où Base64URL est obligatoire

  • JWT et JWS. Les trois segments d’un JSON Web Token utilisent Base64URL sans remplissage. Le décodeur JWT les lit, et Base64 dans les JWT explique le format.
  • OAuth PKCE. Les outils de hachage affichent souvent l’empreinte SHA-256 du verifier en Base64 standard, alors que le code_challenge doit être cette empreinte en Base64URL sans remplissage. Cette conversion est la dernière étape.
  • WebAuthn et JWK. Les identifiants de credentials, les challenges et les paramètres de clé d’une JSON Web Key sont en Base64URL.
  • Les URL signées et les jetons dans les liens, comme les liens de réinitialisation de mot de passe ou de téléchargement, où la valeur se trouve dans un chemin ou une query string.

Pour encoder du texte directement en Base64URL sans passer par la forme standard, utilisez l’encodeur Base64URL.

Base64 en Base64URL dans le code

import base64
base64.urlsafe_b64encode(b"<<???>>").rstrip(b"=").decode()   # 'PDw_Pz8-Pg'
Buffer.from("PDw/Pz8+Pg==", "base64").toString("base64url");   // 'PDw_Pz8-Pg'
"PDw/Pz8+Pg==".replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");   // same, without Buffer

urlsafe_b64encode de Python garde le remplissage, d’où le rstrip. L’encodage "base64url" de Node le retire. Plus de détails dans les guides Python et Node.js.

FAQ

La conversion en Base64URL modifie-t-elle les données ?

Non. Les deux alphabets encodent les mêmes octets ; seuls deux caractères et le remplissage diffèrent. Décoder l’une ou l’autre forme donne des octets identiques.

Faut-il retirer le remplissage = lors de la conversion ?

Suivez ce qu’attend le destinataire. Les JWT (RFC 7515) et PKCE (RFC 7636) exigent l’absence de remplissage. Certaines bibliothèques acceptent les deux, et quelques décodeurs anciens l’exigent : dans ce cas, cochez Remplissage (=).

Peut-on convertir du Base64 en Base64URL avec une regex ?

Oui : s.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "") en JavaScript. Cela suppose une entrée sur une seule ligne propre ; supprimez d’abord les sauts de ligne si elle vient d’un fichier PEM ou d’un e-mail.

L'encodage en pourcent du Base64 standard est-il une alternative ?

Il fonctionne, mais +, / et = se changent en %2B, %2F et %3D, trois caractères chacun, et la valeur casse encore dans les systèmes qui décodent l’URL deux fois ou lisent + comme une espace. Base64URL n’a aucun de ces deux problèmes.