927 votes

A quoi sert le codage en base 64 ?

J'ai entendu des gens parler de "codage en base 64" ici et là. À quoi cela sert-il ?

6 votes

Extrait du manuel de base64_encode() : "Cet encodage est conçu pour que les données binaires survivent au transport par des couches de transport qui ne sont pas propres à 8 bits, comme les corps de courrier."

1114voto

Dave Markle Points 44637

Lorsque vous souhaitez transmettre des données binaires sur un réseau, vous ne vous contentez généralement pas de diffuser les bits et les octets sur le câble dans un format brut. Pourquoi ? Parce que certains médias sont faits pour diffuser du texte en continu. On ne sait jamais - certains protocoles peuvent interpréter vos données binaires comme des caractères de contrôle (comme un modem), ou vos données binaires peuvent être faussées parce que le protocole sous-jacent peut penser que vous avez entré une combinaison de caractères spéciale (comme la façon dont FTP traduit les fins de ligne).

Pour contourner ce problème, les gens codent les données binaires en caractères. Base64 est l'un de ces types d'encodage.

Pourquoi 64 ?
Parce que vous pouvez généralement compter sur le fait que les mêmes 64 caractères sont présents dans de nombreux jeux de caractères, et vous pouvez être raisonnablement sûr que vos données aboutiront de l'autre côté du fil sans être corrompues.

115 votes

(En théorie, vous pourriez faire un codage en base 80 ou quelque chose de similaire, mais ce serait beaucoup plus difficile. Les puissances de deux sont des bases naturelles pour le binaire).

14 votes

@yokees : Il n'y a aucune garantie, ce sont juste des personnages qui sont presque toujours sûr. C'est pourquoi il existe plusieurs formes de Base-64 ( fr.wikipedia.org/wiki/Base-64 ).

2 votes

@Jon - Quelle variante le navigateur utilise-t-il lorsque je mets Base64 dans une balise d'image ?

242voto

Jon Skeet Points 692016

Il s'agit essentiellement d'un moyen de coder des données binaires arbitraires en texte ASCII. Il faut 4 caractères pour 3 octets de données, plus éventuellement un peu de remplissage à la fin.

Essentiellement, chaque 6 bits de l'entrée est codé dans un alphabet de 64 caractères. L'alphabet "standard" utilise A-Z, a-z, 0-9 et + et /, avec = comme caractère de remplissage. Il existe des variantes sécurisées pour les URL.

Wikipedia est une assez bonne source d'informations supplémentaires.

0 votes

Dans un langage comme le php, d'où viennent les données binaires ? Nous travaillons presque toujours avec des données de type chaîne, c'est-à-dire du texte.

5 votes

@CholthiPaulTtiopic : Les résultats du cryptage ou de la compression, ou du son/images/vidéo.

0 votes

Qu'en est-il du stockage, php ne semble pas avoir de type de données binaires.

143voto

Brad Wilson Points 22910

Le codage en base 64 est un moyen de transformer des données binaires en texte afin de les transmettre plus facilement dans des documents tels que les courriers électroniques et les formulaires HTML.

http://en.wikipedia.org/wiki/Base64

131voto

Ates Goral Points 47670

Il s'agit d'un codage textuel de données binaires où le texte résultant ne comporte que des lettres, des chiffres et les symboles "+", "/" et "=". C'est un moyen pratique de stocker/transmettre des données binaires sur un support spécifiquement utilisé pour les données textuelles.

Mais pourquoi Base-64 ? Les deux alternatives pour convertir des données binaires en texte qui viennent immédiatement à l'esprit sont :

  1. Décimal : stocke la valeur décimale de chaque octet sous forme de trois nombres : 045 112 101 037 etc. où chaque octet est représenté par 3 octets. Les données se multiplient par trois.
  2. Hexadécimal : stocke les octets sous forme de paires hexadécimales : AC 47 0D 1A etc. où chaque octet est représenté par 2 octets. Les données sont doublement gonflées.

La base 64 fait correspondre 3 octets (8 x 3 = 24 bits) en 4 caractères qui couvrent 6 bits (6 x 4 = 24 bits). Le résultat ressemble à quelque chose comme "TWFuIGlzIGRpc3Rpb...". Le gonflement n'est donc que de 4/3 = 1,3333333 fois l'original.

13 votes

Ai-je bien compris que 64 est le meilleur choix car c'est la plus grande puissance de deux convertible en un caractère ASCII imprimable (il y en a 95) ?

0 votes

Si dans les deux cas, ils sont de 24 bits, alors le gonflement n'est-il pas de 1:1 ? Ou quand vous dites 4 caractères qui couvrent 6 bits, voulez-vous dire qu'il y a en fait 8 bits par caractère mais que les deux premiers sont des 0 remplis ?

1 votes

@Backwards_Dave Chaque 6 bits est exprimé en 8 bits. Le gonflement est donc de 8:6, ou 4:3.

96voto

Despertar Points 5365

En dehors de ce qui a déjà été dit, deux utilisations très courantes qui n'ont pas été mentionnées sont les suivantes

Les hachages :

Les hachages sont des fonctions à sens unique qui transforment un bloc d'octets en un autre bloc d'octets de taille fixe, par exemple 128 ou 256 bits (SHA/MD5). La conversion des octets résultants en Base64 facilite l'affichage du hachage, notamment lorsque vous comparez une somme de contrôle pour l'intégrité. Les hachages sont si souvent vus en Base64 que de nombreuses personnes confondent Base64 lui-même avec un hachage.

Cryptographie :

Étant donné qu'une clé de chiffrement ne doit pas être du texte mais des octets bruts, il est parfois nécessaire de la stocker dans un fichier ou une base de données, ce pour quoi Base64 s'avère pratique. Il en va de même pour les octets chiffrés qui en résultent.

Notez que bien que Base64 soit souvent utilisé en cryptographie, il ne s'agit pas d'un mécanisme de sécurité. N'importe qui peut reconvertir la chaîne Base64 en ses octets d'origine. Elle ne doit donc pas être utilisée comme un moyen de protéger les données, mais uniquement comme un format permettant d'afficher ou de stocker plus facilement des octets bruts.

Certificats

Les certificats x509 au format PEM sont encodés en base 64. http://how2ssl.com/articles/working_with_pem_files/

6 votes

Il est en fait plus facile, en termes de traitement, de stocker des octets en tant qu'octets dans de nombreux cas. Même dans une base de données, et notamment dans un fichier (si des enregistrements de longueur fixe sont utilisés, ou si les octets sont le seul contenu). Base64 est typiquement utilisé lorsque ces octets sont destinés à être transmis quelque part, en particulier sur un canal qui pourrait couper des bits ou interpréter certains des octets comme des codes de contrôle.

0 votes

Je n'ai jamais vu un hachage écrit sous forme d'entiers 8 bits non signés, 0,1,255,36... et l'afficher avec UTF-8 ou tout autre encodage n'aurait aucun sens, comment l'afficher autrement qu'avec base64 ? Les clés de chiffrement et les données chiffrées sont souvent stockées dans des fichiers de configuration et XML où vous ne pouvez pas stocker les octets bruts. Je suis d'accord pour dire que si vous pouvez les stocker sous forme d'octets bruts, alors tout est possible, mais la base64 est destinée aux situations où vous ne pouvez pas le faire. Il existe de nombreuses utilisations de base64 au-delà de la transmission. Il s'agit simplement de deux scénarios courants où vous le verrez.

1 votes

Vous devez afficher le hachage en hexagone et non en décimal. Pour les hachages, c'est en fait beaucoup plus courant que la base64.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X