Comment réparer une chaîne Base64
- Collez la valeur cassée dans Base64 à vérifier. Laissez les guillemets, préfixes et sauts de ligne qui l’entourent : l’outil en a besoin pour comprendre ce qui s’est passé.
- Choisissez le Format de sortie : standard avec remplissage, standard sans remplissage, URL-safe avec ou sans remplissage, MIME (lignes de 76 caractères, CRLF) ou PEM (lignes de 64 caractères).
- Lisez Ce qui a été corrigé. Chaque réparation est listée à part : vous distinguez ainsi le simple nettoyage des modifications qui ont pu coûter des données.
- Copiez ou téléchargez le résultat, appuyez sur Valider le résultat pour le soumettre à une vérification complète, ou sur Télécharger le fichier décodé pour enregistrer les octets.
Ce que la réparation corrige
| Vous avez collé | Ce qui s’est passé | Réparé |
|---|---|---|
"SGVsbG8gd29ybGQ\u003d" | chaîne JSON avec un = échappé | SGVsbG8gd29ybGQ= |
SGVsbG8%3D | encodé en pourcent dans une URL | SGVsbG8= |
PDw/Pz8 Pg== | + devenu une espace dans une query string | PDw/Pz8+Pg== |
PDw_Pz8-Pg | URL-safe et sans remplissage | PDw/Pz8+Pg== |
SGVsbG8gd29ybGQ | remplissage supprimé | SGVsbG8gd29ybGQ= |
SGVsbG8=V29ybGQ= | deux valeurs concaténées | SGVsbG9Xb3JsZA== (HelloWorld) |
SGVsbG9= | bits inutilisés non nuls | SGVsbG8= |
Authorization: Basic … | copié avec le nom de l’en-tête | le jeton seul |
Elle supprime aussi les préfixes data:…;base64, et les lignes PEM -----BEGIN …-----, retire les guillemets simples autour de la valeur, reconvertit les \n et \/ littéraux en caractères (le json_encode de PHP écrit \/ par défaut), supprime les espaces et les sauts de ligne, unifie les alphabets +/ et -_ mélangés et corrige le nombre de =.
Pour des valeurs concaténées, chaque morceau est décodé séparément, puis les octets sont assemblés : c’est correct quand un programme a ajouté des blocs avec remplissage les uns après les autres. Supprimer plutôt les = intermédiaires décalerait tous les bits suivants et produirait du charabia.
Les réparations qui peuvent masquer un vrai problème
Deux corrections sont signalées comme avertissements, car elles reposent sur une supposition :
- Caractères interdits supprimés. Si la chaîne contenait
*,#ou un caractère Unicode égaré, l’outil le supprime et indique lesquels ont disparu. Un caractère au milieu des données était peut-être un vrai symbole abîmé : dans ce cas, les octets décodés resteront faux à partir de cet endroit. - Un caractère orphelin supprimé. Aucun encodeur ne peut produire une longueur dont le reste vaut 1 : soit un caractère est en trop, soit la chaîne a été coupée. L’outil supprime le dernier caractère pour que le reste se décode, mais si la valeur était tronquée, la fin du fichier est perdue. Une image tronquée a généralement le bas gris ou absent ; un ZIP tronqué ne s’ouvre pas.
Quand l’un de ces avertissements apparaît, essayez de récupérer l’original : une ligne de log non tronquée, une réponse d’API complète ou la pièce jointe directement depuis le serveur de messagerie.
Pourquoi une correction naïve ne suffit pas
L’extrait habituel pour « réparer » du Base64 traite les espaces, les caractères URL-safe et le remplissage :
def fix_base64(s):
s = "".join(s.split())
s = s.replace("-", "+").replace("_", "/").rstrip("=")
return s + "=" * (-len(s) % 4)
Il répare correctement SGVsbG8gd29ybGQ et PDw_Pz8-Pg. Donnez-lui PDw/Pz8 Pg==, où un + est devenu une espace : il supprime l’espace et laisse 9 caractères de données. Python échoue alors avec « number of data characters (9) cannot be 1 more than a multiple of 4 ». Les échappements JSON, les %3D, les blocs collés et les préfixes passent à travers de la même façon. La réparation proposée ici essaie chaque correction tour à tour et n’applique le remplacement de l’espace par un plus que si le résultat a une longueur valide.
La solution la plus sûre à long terme se trouve à la source : encodez le Base64 en pourcent avant de le mettre dans une URL, ou utilisez Base64URL, et tenez-le à l’écart des endroits qui recoupent ou échappent le texte. Si la chaîne réparée se décode toujours en quelque chose d’inattendu, le guide des erreurs Base64 traite du texte illisible et du double encodage, et le décodeur Base64 affiche les octets.
FAQ
Comment corriger « Incorrect padding » en Python ?
Ajoutez des = jusqu’à ce que la longueur soit un multiple de 4 : s + "=" * (-len(s) % 4). Si l’erreur persiste, la chaîne a subi d’autres dégâts, comme des espaces ou des échappements ; collez-la ici pour voir ce qui cloche encore.
Pourquoi y a-t-il des espaces dans mon Base64 ?
En général, un + est passé par une query string ou un formulaire HTML sans encodage pourcent, et le destinataire l’a transformé en espace. La réparation remet le + quand cela donne une longueur valide.
Une réparation peut-elle faire perdre des données ?
Supprimer des caractères interdits ou un dernier caractère orphelin le peut, et la liste des corrections le signale. Si l’outil indique qu’il a supprimé un caractère parce que les données étaient tronquées, récupérez une copie complète de l’original au lieu de vous fier au résultat.
Que signifie \u003d à la fin de mon Base64 ?
C’est l’échappement JSON de =. Certaines bibliothèques JSON, dont Gson, échappent = par sécurité pour le HTML. Un parseur JSON le reconvertit automatiquement ; la réparation fait de même quand vous collez le texte brut.