Aller au contenu
DeepBase64

Pourquoi mon base64 est-il encodé deux fois ?

Vous avez décodé une chaîne base64 et obtenu une autre chaîne base64. Rien n’est cassé et vous ne vous êtes pas trompé : la valeur était bel et bien encodée plus d’une fois, et chaque décodage retire exactement une couche.

Presque personne n’encode deux fois volontairement. Cela arrive parce que deux systèmes ont fait leur travail sans savoir que l’autre l’avait déjà fait. Un service encode une valeur avant de la placer dans un champ ; le transport qui porte le message entier l’encode aussi. Un secret Kubernetes contient une valeur qui était déjà du base64 quand quelqu’un l’a collée dans le YAML, lequel l’encode de nouveau. Un webhook signe une charge, encode la signature, et la chaîne de livraison encode l’enveloppe. Un système de journalisation encode tout ce dont il ne peut garantir le caractère imprimable, y compris un champ déjà encodé en amont pour la même raison.

On ne peut pas savoir combien il y a de couches en regardant. La sortie de base64 est une entrée valide pour base64, si bien qu’une valeur emballée une fois et une valeur emballée quatre fois sont le même genre de chaîne. Le seul indice visible est la longueur : chaque couche allonge le texte d’environ un tiers, donc les valeurs très imbriquées deviennent remarquablement grandes.

La voie de sortie consiste à décoder à répétition jusqu’à ce que le résultat ne soit plus du base64. À la main, cela veut dire recoller chaque résultat dans l’entrée et perdre le compte, et c’est pourquoi un outil qui retire toutes les couches d’un coup et annonce combien il y en avait vaut la peine.

L’automatiser comporte un piège, et il vaut d’être connu quel que soit l’outil : du texte ordinaire est parfois du base64 valide. Un décodeur qui continue tant que l’entrée a seulement l’air décodable transformera volontiers un mot comme "Password" en bruit et annoncera une couche qui n’a jamais existé. S’arrêter correctement est plus difficile que décoder, et annoncer un nombre de couches sans juger chacune d’elles, c’est annoncer une supposition.

Ouvrir le décodeur