Base64 expliqué : pourquoi il alourdit les données et comment le décoder
Base64 écrit des données binaires sous forme de texte brut, avec 64 caractères : de A à Z, de a à z, de 0 à 9, plus + et /. Chaque groupe de trois octets devient quatre caractères, si bien que le texte est environ un tiers plus long que les données qu'il contient. On l'utilise lorsqu'un format n'accepte que du texte, par exemple une data URL dans une page web, un champ JSON ou une pièce jointe d'e-mail.
Pourquoi les formats de texte en ont besoin
Beaucoup de formats ont été conçus uniquement pour le texte. Le corps d'un e-mail, un fichier JSON ou un fichier CSS peuvent contenir des lettres et des symboles sans problème, mais une image brute ou un fichier ZIP contient des valeurs d'octets que certains systèmes modifieraient, tronqueraient ou interpréteraient comme des codes de contrôle. Base64 n'utilise que des caractères que tout système de texte transmet sans les modifier, si bien que les données arrivent intactes. Il est défini dans la RFC 4648.
Base64 est un encodage, pas un secret. N'importe qui peut le décoder sans clé, il ne faut donc jamais s'en servir pour cacher un mot de passe ou des données personnelles.
Comment trois octets deviennent quatre caractères
Prenons le mot Man, qui fait trois octets : 77, 97 et 110 en décimal. Ensemble, ces trois octets forment 24 bits. Découpez les 24 bits en quatre groupes de six bits : chaque groupe est un nombre de 0 à 63, qui désigne un caractère de l'alphabet. Man devient TWFu.
Six bits ne permettent que 64 valeurs, donc quatre caractères transportent trois octets. La sortie est donc environ un tiers plus grande que l'entrée, avant même l'ajout de sauts de ligne.
Lorsque les données ne se découpent pas en groupes de trois octets, l'encodeur complète la fin avec des signes =. Ma, qui fait deux octets, devient TWE=, et M, qui fait un octet, devient TQ==. Ce remplissage indique au décodeur combien d'octets contient le dernier groupe.
Le texte doit d'abord être encodé en UTF-8
Base64 travaille sur des octets, alors que le texte est constitué de caractères. Un caractère comme é ou ✓ est stocké sur plusieurs octets en UTF-8, l'encodage utilisé sur le web. La fonction btoa() du navigateur prend une chaîne et traite chaque caractère comme un octet, si bien qu'elle échoue sur les caractères au-delà de la plage latine de base. L'appeler sur une coche provoque une erreur InvalidCharacterError.
La solution consiste à convertir d'abord le texte en octets UTF-8, puis à encoder ces octets. La phrase héllo ✓ fait 10 octets en UTF-8, et son Base64 est aMOpbGxvIOKckw==. L'outil Encoder et décoder en Base64 effectue cette étape pour vous. Au décodage, il relit les octets en UTF-8. Si les octets ne forment pas un texte UTF-8 valide, l'outil les traite comme un fichier et propose un téléchargement.
Base64 compatible avec les URL
L'alphabet standard contient + et /. Dans une URL, + peut représenter une espace, et / sépare les segments d'un chemin, si bien qu'une chaîne Base64 peut casser un lien. La forme compatible avec les URL (RFC 4648, section 5) utilise - et _ à la place, et supprime généralement le remplissage =. Utilisez-la lorsque la chaîne va dans une URL, un nom de fichier ou un jeton. Le décodeur accepte les deux formes, avec ou sans remplissage.
Si le Base64 provient d'un lien, décodez d'abord l'URL. Une valeur encodée en pourcentage dans un lien doit être décodée avant que son Base64 puisse être lu. Le guide sur l'encodage en pourcentage explique les règles applicables aux liens.
Le cas le plus courant est celui du jeton de connexion : un JSON Web Token est composé de trois parties en Base64url, séparées par des points : un en-tête, les données et une signature. Décodeur JWT en isole une et affiche l'en-tête et les données sous forme de JSON lisible.
Data URL et images
Une data URL intègre le fichier dans le lien lui-même. Sa forme est data:, suivi du type de média, puis de ;base64, puis d'une virgule et des données. Une petite image devient data:image/png;base64, suivi des octets encodés. Les pages web et les feuilles de style acceptent cette forme, ce qui évite une requête pour une minuscule icône.
Le coût se mesure en taille. Les données sont environ un tiers plus grosses, et elles voyagent à l'intérieur de la page ou de la feuille de style, au lieu d'être un fichier séparé que le navigateur peut mettre en cache. Réservez les data URL aux petites images, pas aux grosses photos. Compressez la photo avant de l'encoder si elle est volumineuse.
Lorsque vous décodez du Base64 dans l'outil, il examine les premiers octets des données. Les fichiers PNG, JPEG, GIF et WebP commencent chacun par une signature connue, si bien que l'outil affiche un aperçu et propose un téléchargement. Une data URL de type image est elle aussi affichée sous forme d'image.
Mode d'emploi avec fixmint
- Choisissez Encoder ou Décoder au-dessus de Texte ou Base64, puis collez votre texte ou votre Base64.
- Cochez Alphabet compatible URL, sans remplissage = pour les jetons, les noms de fichiers et les liens. Le décodeur accepte les deux formes dans tous les cas.
- Pour créer une data URL à partir d'un fichier, déposez le fichier dans la zone prévue à cet effet et cochez Pour les fichiers : générer une data: URL.
- Copiez le résultat. Si les octets décodés forment un fichier plutôt qu'un texte, utilisez le téléchargement proposé par l'outil.
Erreurs de décodage courantes
- Un caractère n'est pas autorisé. L'entrée contient un caractère en dehors des 64, comme un guillemet venu d'une phrase copiée. Vérifiez d'où vient le texte. Une espace de largeur nulle dans le texte copié provoque la même erreur : supprimez les caractères invisibles et réessayez. Le guide sur les caractères invisibles explique d'où ils viennent.
- La longueur est incorrecte. Un caractère manque ou est en trop, ce qui signifie en général que la copie a été coupée.
- Sauts de ligne et espaces. L'e-mail (MIME) coupe le Base64 toutes les 76 caractères. Le décodeur supprime les espaces et les sauts de ligne : vous pouvez donc coller le texte tel quel.
- Remplissage manquant. Certains systèmes suppriment les signes =. Le décodeur les rajoute.
Cas particuliers
- Le résultat décodé semble absurde. Il s'agit peut-être d'un fichier et non d'un texte. Un fichier ZIP, un PDF ou un programme se décodent en octets qui ne se lisent pas comme du texte. L'outil les propose en téléchargement.
- Entrées très volumineuses. Le fichier entier reste dans le navigateur pendant l'encodage ou le décodage. Un fichier très gros peut donc être lent et, sur téléphone, échouer.
Réponses rapides
Le Base64 est-il la même chose que le chiffrement ?
Non. C'est un encodage réversible, sans clé, que n'importe qui peut décoder.
Pourquoi mon Base64 est-il plus long que le fichier ?
Chaque groupe de trois octets devient quatre caractères, si bien que le texte est environ un tiers plus grand.
Pourquoi une chaîne Base64 copiée ne se décode-t-elle pas ?
En général, un caractère a été perdu ou ajouté pendant la copie, par exemple un saut de ligne au mauvais endroit ou un dernier caractère manquant. Copiez-la de nouveau depuis la source.
Traduit de Version originale anglaise avec l’aide de l’IA.
Commentaires
Aucun commentaire pour l’instant. Soyez le premier.


