Base64
7 tools
Qu'est-ce que l'encodage ?
L'encodage est le processus de conversion de données d'une représentation à une autre. Dans le développement Web, l'encodage est utilisé pour transmettre des données en toute sécurité via des canaux conçus pour un jeu de caractères limité.
L'encodage de caractères définit comment les caractères textuels se mappent aux octets. L'encodage Base64 convertit les données binaires en texte ASCII. L'encodage URL rend le texte arbitraire sûr pour une utilisation dans les URL.
Histoire de l'encodage de caractères
L'encodage de caractères est le mappage entre les caractères et leurs représentations binaires :
Code standard américain à 7 bits. 128 caractères : lettres anglaises, chiffres, ponctuation et codes de contrôle.
ASCII étendu pour les langues d'Europe occidentale. Ajout de 128 caractères. Non adapté aux scripts non latins.
Jeu de caractères universel couvrant tous les systèmes d'écriture du monde. Définit des points de code pour plus de 149 000 caractères.
Encodage à largeur variable d'Unicode utilisant 1 à 4 octets par caractère. Compatible ASCII. L'encodage dominant sur le Web.
Encodage à largeur variable utilisant 2 ou 4 octets par caractère. Utilisé en interne par Windows, Java et les chaînes JavaScript.
Encodage à largeur fixe : toujours 4 octets par caractère. Rarement utilisé sur le Web.
Pourquoi UTF-8 a gagné
UTF-8 est devenu dominant car il est rétrocompatible avec ASCII, auto-synchronisant et économe en espace pour le texte latin. Tout document ASCII est un document UTF-8 valide.
Encodage Base64
Base64 convertit les données binaires en une représentation textuelle utilisant seulement 64 caractères ASCII imprimables. Nécessaire lorsque des données binaires doivent transiter par des canaux textuels.
Comment ça fonctionne
Base64 regroupe les octets d'entrée en blocs de 3 octets et encode chaque bloc en 4 caractères Base64. Si l'entrée n'est pas un multiple de 3 octets, des caractères de remplissage = sont ajoutés :
| Entrée | Octets hex | Base64 |
|---|---|---|
| "Man" | 77 61 6E | TWFu |
| "Ma" | 4D 61 | TWE= |
| "M" | 4D | TQ== |
Les caractères = de remplissage indiquent combien d'octets manquaient pour compléter le dernier groupe de 3 octets. Le Base64 standard produit toujours une sortie dont la longueur est un multiple de 4.
Encodage URL
Les URL ne peuvent contenir qu'un ensemble limité de caractères ASCII sûrs. Tout caractère hors de cet ensemble doit être encodé en pourcentage.
L'encodage en pourcentage remplace chaque octet non sûr par % suivi de deux chiffres hexadécimaux représentant la valeur de cet octet.
Caractères couramment encodés
| Caractère | Encodé | Notes |
|---|---|---|
| Space | %20 | Le plus courant ; utilisé dans les soumissions de formulaires comme + dans application/x-www-form-urlencoded |
| & | %26 | Séparateur de chaîne de requête ; doit être encodé en valeur littérale |
| = | %3D | Séparateur clé-valeur dans les chaînes de requête ; encoder en données |
| + | %2B | Interprété comme espace dans application/x-www-form-urlencoded ; encoder pour conserver + |
| # | %23 | Identifiant de fragment ; encoder en données littérales dans un chemin ou une requête |
| / | %2F | Séparateur de segment de chemin ; encoder en données littérales |
| : | %3A | Séparateur de schéma ; encoder dans les contextes de chemin et de requête |
| @ | %40 | Utilisé dans mailto: et auth ; encoder en données littérales |
encodeURI vs encodeURIComponent
JavaScript fournit deux fonctions d'encodage aux portées différentes. encodeURI encode une URL complète. encodeURIComponent encode un composant d'URL — il encode tous les caractères sauf A-Z, a-z, 0-9, -, _, ., ~.
Où l'encodage apparaît dans le développement Web
L'en-tête Authorization: Basic encode les identifiants sous forme de Base64(utilisateur:motdepasse). C'est un encodage de commodité, PAS de sécurité. Toujours utiliser HTTPS avec Basic Auth.
Les URI de données intègrent le contenu de fichier directement dans HTML ou CSS : data:image/png;base64,.... Cela élimine les requêtes HTTP au prix d'une taille de document accrue.
L'e-mail a été conçu pour l'ASCII 7 bits. Les pièces jointes binaires sont encodées en Base64 par MIME avant transmission.
Les tokens JWT utilisent l'encodage Base64url pour les trois parties, les rendant sûrs pour les URL.
Toutes les données fournies par l'utilisateur dans les chaînes de requête URL doivent être encodées en pourcentage.
Les noms de domaine non ASCII sont encodés en Punycode (préfixe xn--) pour la compatibilité avec le système DNS.
Questions fréquentes
Non. Base64 est un encodage, pas un chiffrement. C'est une transformation réversible sans clé secrète.
Base64 traite l'entrée par groupes de 3 octets. Si l'entrée n'est pas un multiple de 3, un remplissage = est ajouté.
Base64url est une variante sécurisée pour les URL qui remplace + par - et / par _, et omet généralement le remplissage =. Les JWT utilisent Base64url.
Utiliser encodeURIComponent pour les valeurs individuelles. Utiliser encodeURI pour une chaîne URL complète où les caractères de structure URL doivent être préservés.
UTF-8 est compatible ASCII et économe en espace pour le texte latin. HTTP et HTML utilisent UTF-8 par défaut.
L'encodage en pourcentage représente les caractères comme % suivi de leur valeur d'octet hexadécimale. Un espace est %20.
Base64 augmente la taille des données d'environ 33 % et ajoute une charge CPU. L'encodage URL ajoute une surcharge minimale.
Punycode est un encodage pour représenter les caractères Unicode dans le système DNS compatible ASCII. Les domaines comme münchen.de sont encodés en xn--mnchen-3ya.de.