Comment convertir du Base64URL en Base64
- Collez le Base64URL dans Entrée · Base64URL. Le remplissage est facultatif, et les
+et/standard dans l’entrée sont acceptés aussi. - Le Base64 standard apparaît dans Sortie · Base64, avec
-et_changés en+et/et le remplissage restauré. - Sous la sortie, Remplissage (=) est activé par défaut ; Retour à la ligne peut couper le résultat à 64 caractères pour PEM ou à 76 pour MIME.
- Copier la sortie. Le sélecteur Base64 → Base64URL, ou Base64 en Base64URL, fait l’inverse.
Combien de remplissage ajouter
Le Base64 fonctionne par groupes de 4 caractères. Le Base64URL supprime généralement les signes = qui complètent le dernier groupe : la longueur vous dit donc combien en remettre.
| Longueur mod 4 | Remplissage à ajouter | Exemple |
|---|---|---|
| 0 | aucun | eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 (36 caractères) |
| 2 | == | PDw_Pz8-Pg (10) devient PDw/Pz8+Pg== |
| 3 | = | eyJyb2xlIjoiYWRtaW4-In0 (23) devient eyJyb2xlIjoiYWRtaW4+In0= |
| 1 | invalide | un seul caractère restant ne peut pas contenir un octet entier |
Le payload d’exemple bien connu eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ fait 70 caractères, soit un reste de 2 : il devient la même chaîne suivie de ==. Le guide du remplissage donne le raisonnement complet.
Pourquoi vous pourriez avoir besoin de Base64 standard
Beaucoup de décodeurs n’acceptent que l’alphabet standard, et ils échouent de différentes façons face à du Base64URL :
- GNU coreutils :
base64 -daffiche ce qu’il a décodé jusqu’au premier-ou_, puisbase64: invalid input. - Java :
Base64.getDecoder()lève uneIllegalArgumentException; c’estBase64.getUrlDecoder()qui convient à une entrée URL-safe. - .NET :
Convert.FromBase64Stringlève uneFormatExceptionpour-,_ou un=manquant. - Python :
base64.b64decodeest le plus dangereux. Par défaut, il ignore sans erreur les caractères hors de l’alphabet standard.b64decode("PDw_Pz8-Pg==")renvoieb'<<\x0f\xcf\xc3\xe0'au lieu deb'<<???>>'.
Ce dernier cas mérite un test dans tout code qui manipule des jetons. De mauvais octets sans exception ne se manifestent en général que bien plus tard, sous la forme d’une vérification de signature ratée ou de données corrompues.
Base64URL en Base64 dans le code
import base64
def b64url_to_bytes(s: str) -> bytes:
return base64.urlsafe_b64decode(s + "=" * (-len(s) % 4))
b64url_to_bytes("PDw_Pz8-Pg") # b'<<???>>'
base64.b64encode(b64url_to_bytes("PDw_Pz8-Pg")).decode() # 'PDw/Pz8+Pg=='
-len(s) % 4 est le nombre de signes = manquants : 0, 1 ou 2 pour une entrée valide. urlsafe_b64decode a besoin du remplissage, d’où son ajout avant l’appel.
function b64urlToB64(s) {
const b = s.replace(/-/g, "+").replace(/_/g, "/");
return b + "=".repeat((4 - (b.length % 4)) % 4);
}
b64urlToB64("PDw_Pz8-Pg"); // 'PDw/Pz8+Pg=='
En Node.js, Buffer.from(s, "base64url").toString("base64") fait la même chose en un appel. Voir les pages Python, Java et C# pour les décodeurs URL-safe de chaque bibliothèque standard.
Problèmes courants
- « le dernier groupe de caractères est incomplet ». La longueur laisse un reste de 1. Une partie de la chaîne a été perdue, souvent à un saut de ligne ou parce qu’une URL a été tronquée.
- Un
.dans l’entrée. Les JWT assemblent trois segments Base64URL avec des points. Convertissez un segment à la fois ; le décodeur JWT accepte le jeton entier. %3Ddans la chaîne. La valeur a en plus été encodée en pourcent par-dessus le Base64URL. Décodez-la d’abord avec Décoder une URL.
FAQ
Comment rajouter le remplissage à du Base64URL ?
Complétez la fin avec des = jusqu’à un multiple de 4 caractères : deux signes pour un reste de 2, un seul pour un reste de 3. Un reste de 1 est impossible avec des données valides. Ce convertisseur le fait pour vous.
Pourquoi base64 -d échoue-t-il sur un JWT ?
Le base64 -d de GNU ne connaît que l’alphabet standard et s’arrête avec invalid input au premier - ou _. Convertissez d’abord le segment ici, ou utilisez basenc --base64url -d, qui lit l’alphabet URL-safe.
Et si la chaîne a un caractère de trop ?
Une chaîne Base64URL dont la longueur laisse un reste de 1 dans la division par 4 est tronquée ou contient un caractère en trop. Le convertisseur signale le dernier groupe incomplet ; vérifiez comment la valeur a été copiée.
Ai-je besoin de Base64 standard pour lire un JWT ?
Pas sur ce site : le décodeur JWT et le décodeur Base64URL lisent directement le Base64URL. Convertissez en Base64 standard quand un autre outil ou une bibliothèque n’accepte que cette forme.