Article de reference

Base64

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-t...

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.

Exemple de fichier SVG contenant des images JPEG intégrées encodées en Base64

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 CSSdata: 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 AZ, azet 09pour 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 .

Alphabet Base64
ValeurValeurvaleurvaleur
Encodage de 'M', 'a', 'n' en Base64
Entrée (ASCII)Lettre (ASCII)Munn
valeur décimale 8 bits7797110
valeur hexadécimale4D616E
Morceaux010011010110000101101110
Encodé (Base64)valeur décimale 6 bits1922546
Lettre (alphabet Base64)TWFvous
Octet848770117

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)Mun7797
valeur hexadécimale4D61
Morceaux010011010110000100Encodé (Base64)valeur décimale 6 bits19224TWE=
Octet84876961

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)M77
valeur hexadécimale4D
Morceaux010011010000Encodé (Base64)valeur décimale 6 bits1916TQ==
octet84816161

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éRembourrageLongueurDécodé
bGlnaHQg dw====1lumiè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 groupeDécodéLongueur décodée du dernier groupe
RFC .

Encodage SpécificationAlphabetLignes
62e63etamponSéparateursLongueurSomme de contrôle
MIMEla messagerie à confidentialité renforcée (obsolète)UTF-7OpenPGPLa RFC 4648 décrit différents encodages, dont Base64, et aborde l'utilisation des sauts de ligne, du remplissage et des caractères non alphabétiques dans les données encodées, ainsi que l'utilisation de différents alphabets d'encodage et les encodages canoniques. La variante appelée « encodage Base64 » est destinée à un usage général.

La RFC spécifie également un second encodage Base64, appelé « Encodage Base64 avec alphabet sécurisé pour les URL et les noms de fichiers » , destiné à représenter des informations d'identification relativement longues. Par exemple, un système de persistance de base de données pour objets Java peut utiliser l'encodage Base64 pour encoder un identifiant unique relativement long (généralement un UUID de 128 bits ) sous forme de chaîne de caractères, utilisable comme paramètre HTTP dans un formulaire HTTP ou une requête HTTP GET . De plus, de nombreuses applications doivent encoder des données binaires de manière à faciliter leur intégration dans une URL, y compris dans des champs cachés de formulaires web ; l'encodage Base64 est alors particulièrement adapté pour les afficher de façon compacte.

L'utilisation du Base64 standard dans une URL nécessite l'encodage des caractères +`\`, `\` /et `\` sous forme de séquences hexadécimales spéciales encodées en pourcentage (`\` devient `\` , `\` devient `\` et `\ ` devient ` \`), ce qui allonge la chaîne et la rend plus difficile à lire. L'utilisation d'un alphabet différent permet un encodage Base64 sans ce balisage supplémentaire. Généralement, `\`, `\` et `\` sont remplacés respectivement par `\` et `\`, de sorte que l'utilisation d'encodeurs/décodeurs d'URL n'est plus nécessaire et n'a aucun impact sur la longueur de la valeur encodée, conservant ainsi la même forme encodée pour une utilisation dans les bases de données relationnelles, les formulaires web et les identificateurs d'objets en général. YouTube est un exemple populaire d'utilisation de cette méthode . Certaines variantes autorisent ou exigent l'omission des signes de remplissage pour éviter toute confusion avec les séparateurs de champs, ou exigent que tout remplissage soit encodé en pourcentage. Certaines bibliothèques encodent ` \` comme `\`, exposant potentiellement les applications à des attaques par chemin relatif lorsqu'un nom de dossier est encodé à partir de données utilisateur.=+%2B/%2F=%3D+/-_=La RFC 3548 , intitulée « Encodages de données Base16, Base32 et Base64 » , est une note d'information (non normative) visant à unifier les spécifications des RFC 1421 et RFC 2045 relatives aux encodages Base64, aux encodages à alphabet alternatif, ainsi qu'aux encodages Base32 (rarement utilisé) et Base16. La RFC 4648 remplace la RFC 3548.

À moins qu'un encodeur ne soit écrit selon une spécification qui fait référence à la RFC 3548 et exige spécifiquement le contraire , la RFC 3548 interdit à un encodeur de générer des messages contenant des caractères en dehors de l'alphabet d'encodage ou sans remplissage, et elle déclare également qu'un décodeur doit rejeter les données contenant des caractères autres que l'alphabet d'encodage. MIME (Multipurpose Internet Mail Extensions) mentionne Base64 comme l'un des deux schémas d'encodage binaire-texte (l'autre étant quoted-printable ). L'encodage Base64 de MIME est basé sur celui de la version PEM de la RFC 1421 : il utilise le même alphabet de 64 caractères et le même mécanisme d'encodage que PEM et utilise le symbole de remplissage de sortie de la même manière, comme décrit dans la RFC 2045 .=

MIME ne spécifie pas de longueur fixe pour les lignes encodées en Base64, mais impose une longueur maximale de 76 caractères. De plus, il précise que tout caractère hors de l'ensemble standard de 64 caractères d'encodage (par exemple, les séquences CRLF) doit être ignoré par un décodeur compatible, bien que la plupart des implémentations utilisent une paire de sauts de ligne CR/LF pour délimiter les lignes encodées.

Ainsi, la longueur réelle des données binaires encodées en Base64 conformes à la norme MIME représente généralement environ 137 % de la longueur des données d'origine (4/3 × 78/76 ) . Toutefois , pour les messages très courts , la surcharge peut être bien plus importante en raison de la taille des en-têtes. En première approximation, la taille finale des données binaires encodées en Base64 est égale à 1,37 fois la taille des données d'origine, plus 814 octets (pour les en-têtes). La taille des données décodées peut être estimée par la formule suivante :Privacy-Enhanced Mail (PEM), proposé par la RFC 989 en 1987. PEM définit un schéma d'« encodage imprimable » qui utilise l'encodage Base64 pour transformer une séquence arbitraire d'octets en un format pouvant être exprimé en courtes lignes de caractères de 6 bits, comme requis par les protocoles de transfert tels que SMTP .

La version actuelle de PEM (spécifiée dans la RFC 1421 ) utilise un alphabet de 64 caractères composé de lettres romaines majuscules et minuscules ( – , – ), des chiffres ( – ) et des symboles et . Le symbole est également utilisé comme suffixe de remplissage. La spécification originale, RFC 989 , utilisait en outre le symbole pour délimiter les données encodées mais non chiffrées au sein du flux de sortie.AZaz09+/=*

Pour convertir des données en encodage PEM imprimable, le premier octet est placé dans les huit bits de poids fort d'un tampon de 24 bits , le suivant dans les huit bits de poids faible et le troisième dans les huit bits de poids faible . S'il reste moins de trois octets à encoder (ou moins au total), les bits restants du tampon sont mis à zéro. Le tampon est ensuite utilisé, six bits à la fois, du plus significatif au plus profond, comme indices dans la chaîne : «ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ », et le caractère indiqué est affiché.

Le processus est répété sur les données restantes jusqu'à ce qu'il en reste moins de quatre. S'il reste trois octets, ils sont traités normalement. S'il reste moins de trois octets (24 bits) à encoder, les données d'entrée sont complétées à droite par des bits nuls pour former un multiple entier de six bits.

Après l'encodage des données non complétées, si deux octets du tampon 24 bits sont remplis de zéros, deux =caractères sont ajoutés à la sortie ; si un seul octet du tampon 24 bits est rempli de zéros, un seul =caractère est ajouté. Ceci indique au décodeur que les bits nuls ajoutés par le remplissage doivent être exclus des données reconstruites. Cela garantit également que la longueur de la sortie encodée est un multiple de 4 octets.

Le format PEM exige que toutes les lignes encodées comportent exactement 64 caractères imprimables, à l'exception de la dernière ligne qui peut en contenir moins. Les lignes sont délimitées par des espaces selon les conventions locales (spécifiques à la plateforme).

UTF-7

L’UTF-7 , décrit initialement dans la RFC 1642 , puis remplacé par la RFC 2152 , a introduit un système appelé Base64 modifié . Ce schéma d’encodage de données est utilisé pour encoder l’UTF-16 en caractères ASCII pour les protocoles de transmission 7 bits tels que SMTP . Il s’agit d’une variante de l’encodage Base64 utilisé dans MIME.

L'alphabet « Base64 modifié » est composé de l'alphabet MIME Base64, mais sans le =caractère de remplissage « ». L'UTF-7 est destiné aux en-têtes de courrier électronique (définis dans la RFC 2047 ), et le caractère « » y est réservé comme caractère d'échappement pour l'encodage « quoted-printable ». Le Base64 modifié omet simplement le remplissage et s'arrête immédiatement après le dernier chiffre Base64 contenant des bits utiles, laissant jusqu'à trois bits inutilisés dans ce dernier.=

OpenPGP

OpenPGP , décrit dans la RFC 9580 , spécifie une « armure ASCII », identique à l’encodage « Base64 » décrit par MIME, avec l’ajout d’un CRC optionnel de 24 bits . La somme de contrôle est calculée sur les données d’entrée avant l’encodage ; elle est ensuite encodée avec le même algorithme Base64 et, précédée du symbole « » comme séparateur, ajoutée aux données de sortie encodées. =

JavaScript (API Web DOM)

Les méthodes JavaScript ` atob()base64` et btoa()`base64`, définies dans la spécification préliminaire HTML5 fournissent des fonctionnalités d'encodage et de décodage Base64 aux pages web. La btoa()méthode `base64` génère des caractères de remplissage, mais ceux-ci sont facultatifs dans ses atob()paramètres d'entrée. Exemple : Encodage du début d'un fichier GIF : btoa("GIF89a")"R0lGODlh".

Avec un ordre alphabétique atypique

Plusieurs variantes utilisent des alphabets similaires aux variantes courantes, mais dans un ordre différent.

Mot de passe Unix
Unix stocke les hachages de mots de passe calculés avec crypt dans un /etc/passwdfichier en utilisant un encodage appelé B64 . L'alphabet de crypt place la ponctuation .avant /les caractères alphanumériques. crypt utilise l'alphabet «./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz » sans remplissage. Un avantage par rapport à la RFC 4648 est que le tri des données ASCII encodées donne le même ordre que le tri des données ASCII non encodées.
GEDCOM
La norme GEDCOM 5.5 pour l'échange de données généalogiques encode les fichiers multimédias dans son format de fichier hiérarchique en lignes de texte. GEDCOM utilise le même alphabet que crypt, qui est «./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz » .
bcrypt
Les hachages bcrypt sont conçus pour être utilisés de la même manière que les hachages crypt(3) traditionnels, mais l'alphabet de bcrypt est dans un ordre différent de celui de crypt. bcrypt utilise l'alphabet " ./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" .
Xxencoding
Xxencoding utilise un jeu de caractères principalement alphanumériques similaire à crypt, mais utilisant+et-plutôt que.et/. Xxencoding utilise l'alphabet " +-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" .
Pack de 6
Utilisé avec certains contrôleurs de nœuds terminaux , utilise un alphabet de 0x00 à 0x3f.
Frapper
Bash prend en charge les littéraux numériques en Base64. Bash utilise l'alphabet " 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@_" .

Avec un alphabet atypique

Certaines variantes utilisent un alphabet Base64 qui est significativement différent des alphabets utilisés dans les variantes Base64 les plus courantes (comme RFC 4648).

Uuencoding
L' alphabet Uuencoding n'inclut pas de minuscules ; il utilise les codes ASCII 32 (« » (espace)) à 95 («_ »), de manière consécutive. Uuencoding utilise l'alphabet «!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ » » . L'absence de minuscules était avantageuse, car de nombreuses imprimantes anciennes n'imprimaient qu'en majuscules. L'utilisation de caractères ASCII consécutifs permettait de réduire la puissance de calcul, puisqu'il suffisait d'ajouter 32, sans avoir recours à une table de correspondance. L'utilisation de la plupart des signes de ponctuation et de l'espace peut toutefois limiter son utilité dans certaines applications, notamment celles qui utilisent ces caractères dans leur syntaxe.BinHex 4 (HQX), utilisé dans le Mac OS classique , exclut certains caractères visuellement ambigus comme '7', 'O', 'g' et 'o'. Son alphabet comprend des signes de ponctuation supplémentaires. Il utilise l'alphabet " !"#$%&'()*+,-012345689@ABCDEFGHIJKLMNPQRSTUVXYZ[`abcdefhijklmpqr" .
UTF-8
Un environnement UTF-8 peut utiliser des octets de continuation non synchronisés comme base64 : . Voir UTF-8#Auto-synchronisation .0b10xxxxxx

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index