Base64 est un encodage binaire-texte qui utilise 64 caractères imprimables pour représenter chaque segment de 6 bits d'une séquence d'octets . Comme tous les encodages binaire-texte, l'encodage Base64 permet de transmettre des données binaires sur un canal de communication ne prenant en charge que le texte.
En comparant les données originales aux données encodées résultantes, l'encodage Base64 augmente la taille de 33 %, plus environ 4 % supplémentaires si l'on insère des sauts de ligne pour une longueur de ligne typique.
Les premières utilisations de cet encodage concernaient la communication par ligne commutée entre systèmes fonctionnant sous le même système d'exploitation – par exemple, uuencode pour UNIX et BinHex pour le TRS-80 (adapté ultérieurement pour Macintosh ) – et pouvaient donc se permettre davantage d'hypothèses quant aux caractères utilisables. Par exemple, uuencode utilise les lettres majuscules, les chiffres et de nombreux signes de ponctuation, mais pas les minuscules.
Applications notables du Base64 :
- Pages Web
- L'encodage Base64 est répandu sur le World Wide Web où il est souvent utilisé pour intégrer des données binaires telles qu'une image numérique dans du texte tel que HTML et CSS .
- Pièces jointes aux courriels
- Le format Base64 est largement utilisé pour l'envoi de pièces jointes aux courriels , car le protocole SMTP , dans sa version originale , ne transportait que des caractères ASCII 7 bits . Encoder une pièce jointe en Base64 avant l'envoi, puis la décoder à la réception, permet aux anciens serveurs SMTP de transmettre correctement les messages contenant des informations binaires.
- Incorporer des données binaires dans un fichier texte
- Par exemple, pour inclure les données d'une image dans un script afin d'éviter de dépendre de fichiers externes.
- Intégrer des données binaires dans du XML
- Pour intégrer des données binaires dans un fichier XML , en utilisant une syntaxe similaire par
<data encoding="base64">...</data>exemple aux favicons exportés par Firefoxbookmarks.html.
- fichiers PDF
- Pour intégrer un fichier PDF dans une page HTML.
- Éléments intégrés
- Bien que cela ne fasse pas partie de la spécification officielle du format SVG , certains visualiseurs peuvent interpréter le Base64 lorsqu'il est utilisé pour des éléments intégrés, tels que des images raster dans des fichiers SVG.
- Prévention des collisions de délimiteurs
- Pour transmettre et stocker du texte qui pourrait autrement provoquer une collision de délimiteurs .
- Format d'échange de données LDAP
- Pour encoder les chaînes de caractères dans les fichiers au format d'échange de données LDAP .
- Schémas d'URI de données
- Le schéma d'URI de données peut utiliser Base64 pour représenter le contenu des fichiers. Par exemple, les images d'arrière-plan et les polices peuvent être spécifiées dans une feuille de style CSS
data:sous forme d'URI, au lieu d'être fournies dans des fichiers séparés.
- Utiliser le presse-papiers
- Pour stocker et transmettre de petites quantités de données binaires via le presse- papiers d'un ordinateur , notamment lorsque l'information ne justifie pas un enregistrement permanent ou lorsqu'elle doit être rapidement transmise entre divers programmes potentiellement incompatibles. Par exemple, les clés publiques des destinataires de cryptomonnaies peuvent être représentées sous forme de chaînes de caractères encodées en Base64, facilement copiables et collables dans le logiciel de portefeuille des utilisateurs .
- Soutenir la vérification humaine
- Les données binaires qui doivent être rapidement vérifiées par des humains comme mécanisme de sécurité, telles que les sommes de contrôle de fichiers ou les empreintes de clés , sont souvent représentées en Base64 pour faciliter la vérification, parfois avec une mise en forme supplémentaire, comme la séparation de chaque groupe de quatre caractères dans la représentation d'une empreinte de clé PGP par un espace.
- Encodage du code QR
- Un code QR , contenant des données binaires, est parfois stocké au format Base64 car un lecteur de code QR est plus susceptible de décoder correctement du texte que des données binaires. De plus, certains appareils préféraient enregistrer le texte d'un code QR plutôt que des données binaires potentiellement malveillantes.
Alphabet
L'ensemble des caractères utilisés pour représenter les valeurs de chaque chiffre en base 64 (valeurs de 0 à 63) diffère légèrement selon les variantes de Base64. La stratégie générale consiste à utiliser des caractères imprimables communs à la plupart des encodages de caractères . Ceci permet généralement de préserver l'intégrité des données lors de leur transmission au sein de systèmes d'information, tels que la messagerie électronique, qui n'étaient traditionnellement pas conçus pour un encodage 8 bits propre . Typiquement, un encodage utilise A– Z, a– zet 0– 9pour les 62 premières valeurs. De nombreuses variantes utilisent +et /pour les deux dernières.
Conformément à la RFC 4648 §4 , le tableau suivant répertorie les caractères utilisés pour chaque valeur numérique.= Le caractère « \ » est utilisé pour indiquer le remplissage .
| Valeur | | Valeur | valeur | valeur | Entrée (ASCII) | Lettre (ASCII) | M | un | n | valeur décimale 8 bits | 77 | 97 | 110 | valeur hexadécimale | 4 | D | 6 | 1 | 6 | E | Morceaux | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | Encodé (Base64) | valeur décimale 6 bits | 19 | 22 | 5 | 46 | Lettre (alphabet Base64) | T | W | F | vous | Octet | 84 | 87 | 70 | 117 | | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Encodage avec un caractère de remplissage
Si le nombre d'octets d'entrée est supérieur de 2 à un multiple de 3 (par exemple « M », « a »), les deux derniers octets (16 bits) sont encodés sur 3 chiffres Base64 (18 bits). Les deux bits de poids faible du dernier bloc de 6 bits contenant des données sont considérés comme nuls pour l'encodage et ignorés pour le décodage (ainsi que le =caractère de remplissage final).
| Entrée (ASCII) | Lettre (ASCII) | M | un | 77 | 97 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| valeur hexadécimale | 4 | D | 6 | 1 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Morceaux | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | Encodé (Base64) | valeur décimale 6 bits | 19 | 22 | 4 | T | W | E | = | ||||||||||||||||||||||||||||||||||||
| Octet | 84 | 87 | 69 | 61 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Encodage avec deux caractères de remplissage
Si le nombre d'octets d'entrée est supérieur de 1 à un multiple de 3 (par exemple « M »), les 8 derniers bits sont représentés sur 2 chiffres Base64 (12 bits). Les quatre bits de poids faible du dernier bloc de 6 bits contenant des données sont considérés comme nuls pour l'encodage et ignorés pour le décodage (ainsi que les deux =caractères de remplissage finaux).
| Entrée (ASCII) | Lettre (ASCII) | M | 77 | ||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| valeur hexadécimale | 4 | D | |||||||||||||||||||||||||||||||||||||||||||||||||
| Morceaux | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | Encodé (Base64) | valeur décimale 6 bits | 19 | 16 | T | Q | = | = | |||||||||||||||||||||||||||||||
| octet | 84 | 81 | 61 | 61 | |||||||||||||||||||||||||||||||||||||||||||||||
Décodage avec remplissage
Lors du décodage, chaque séquence de quatre caractères encodés est convertie en trois octets de sortie. Cependant, avec un seul caractère de remplissage, les quatre derniers caractères ne sont décodés que sur deux octets, et avec deux caractères de remplissage, ils ne sont décodés que sur un seul octet. Par exemple :
| Encodé | Rembourrage | Longueur | Décodé | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| bGlnaHQg dw== | == | 1 | lumière la concaténation de chaînes encodées en Base64, l'utilisation de caractères de remplissage est requise pendant l'encodage afin d'éviter toute ambiguïté lors du décodage. Sans remplissage, après le décodage de chaque séquence de 4 caractères encodés, il peut rester 2 ou 3 caractères. 2(3x=4y) -> x=4&y=3 ???"},"date":{"wt":"June 2026"}},"i":0}}] Il est impossible qu'il ne reste qu'un seul caractère, car un caractère Base64 ne contient que 6 bits, et 8 bits sont nécessaires pour former un octet. Encodé | Longueur du dernier groupe | Décodé | Longueur décodée du dernier groupe | RFC . |
| |||||||||||||||||||