Encodeur et décodeur Base64URL

Convertissez du texte, des octets hexadécimaux ou des fichiers en Base64 compatible URL, et inversement. L’alphabet utilise - et _ au lieu de + et /, et le remplissage est désactivé par défaut, comme dans les JSON Web Tokens et OAuth PKCE.

Fonctionne entièrement dans votre navigateur. Aucune donnée n’est envoyée.

Mode d’emploi

  1. Choisissez Encoder ou Décoder. La variante compatible URL est présélectionnée, avec le remplissage désactivé.
  2. Saisissez ou collez du texte, entrez des octets en hexadécimal ou ouvrez un fichier. Le résultat se met à jour pendant la saisie.
  3. N’activez le remplissage que si le système destinataire exige des signes = à la fin.
  4. Copiez le résultat ou téléchargez-le.

Qu’est-ce que Base64URL ?

Base64URL est défini dans la section 5 de la RFC 4648 sous le nom « Base 64 Encoding with URL and Filename Safe Alphabet ». Il fonctionne exactement comme le Base64 standard, avec 6 bits par caractère, mais remplace les deux caractères qui posent problème dans les URL et les chemins de fichiers :

Base64 standardBase64URL
Valeur 62+-
Valeur 63/_
Remplissage=, obligatoiregénéralement omis

Dans une URL, + peut être interprété comme une espace, / sépare les segments du chemin et = sépare les clés de leurs valeurs dans la chaîne de requête : le Base64 standard doit donc être encodé en pourcentage avant d’être placé dans un lien. Base64URL ne nécessite aucun échappement. La RFC 4648 autorise l’omission du remplissage lorsque la longueur est connue par le contexte, et la plupart des spécifications fondées sur Base64URL font précisément ce choix.

Où Base64URL est utilisé

  • JSON Web Tokens. L’en-tête, la charge utile et la signature d’un JWT sont chacun encodés en Base64URL sans remplissage (RFC 7515). Pour en lire un, utilisez le décodeur JWT.
  • OAuth 2.0 PKCE. Le code_challenge est la forme Base64URL sans remplissage du hachage SHA-256 du code verifier (RFC 7636) ; il fait donc toujours 43 caractères.
  • JSON Web Keys et WebAuthn. Les paramètres de clé tels que n, e, x et y, ainsi que les challenges WebAuthn et les identifiants d’authentifiants (credential ID), sont échangés en Base64URL.
  • Jetons, identifiants et noms de fichiers. Les liens de réinitialisation, les URL signées et les clés de cache transportent du Base64URL sans échappement ; un identifiant aléatoire de 16 octets devient une chaîne de 22 caractères. Sur les systèmes de fichiers insensibles à la casse, préférez Base32, car Base64URL distingue les majuscules des minuscules.

Convertir entre Base64 et Base64URL

Les deux variantes encodent les mêmes octets : la conversion se résume donc à un échange de caractères. Remplacez + par - et / par _, puis supprimez les = finaux. Pour revenir en arrière, échangez de nouveau les caractères et ajoutez des = jusqu’à ce que la longueur soit un multiple de 4. Le décodeur de cette page accepte les deux alphabets, avec ou sans remplissage.

// Node.js 16+
Buffer.from(data).toString('base64url')
Buffer.from(str, 'base64url')

# Python (urlsafe_b64encode conserve le remplissage)
base64.urlsafe_b64encode(data).rstrip(b'=')

// Go
base64.RawURLEncoding.EncodeToString(data)

// Java
Base64.getUrlEncoder().withoutPadding().encodeToString(bytes)

Spécifications

AlphabetA-Z a-z 0-9 - _
Taille de sortie4 caractères pour 3 octets (environ 133 %)
RemplissageFacultatif, généralement omis
NormeRFC 4648, section 5
Sensible à la casseOui

Exemples

Entrée (UTF-8)Sortie
Hello, World!SGVsbG8sIFdvcmxkIQ
Base64.isQmFzZTY0Lmlz
你好5L2g5aW9

Questions fréquentes

Base64URL revient-il à encoder une chaîne Base64 pour une URL ?
Non. L’encodage-pourcent du Base64 standard transforme +, / et = en %2B, %2F et %3D, ce qui allonge la chaîne. Base64URL utilise un alphabet différent, si bien qu’aucun échappement n’est nécessaire. Les deux formes ne sont pas interchangeables sans conversion.
Base64URL doit-il comporter du remplissage ?
Cela dépend du destinataire. JWT, JSON Web Keys et PKCE exigent qu’il soit omis, tandis que urlsafe_b64encode de Python et l’encodeur URL par défaut de Java l’ajoutent. Dans le doute, omettez-le : ce décodeur accepte les deux formes.
Pourquoi un décodeur Base64 standard refuse-t-il ma chaîne Base64URL ?
Les décodeurs standard stricts n’acceptent pas - et _, et certains exigent le remplissage. Échangez les caractères et ajoutez des signes = pour que la longueur soit un multiple de 4, ou décodez la chaîne ici.
Comment vérifier un code challenge PKCE ?
Le challenge vaut BASE64URL(SHA256(code_verifier)), sans remplissage. Décodez-le ici avec la sortie Hexa : une valeur correcte donne exactement 32 octets, que vous pouvez comparer au hachage SHA-256 du verifier.