LINUX:Base64
But
Le codage Base64 est ancien et est encore utilisé massivement spécialement pour le transfert de fichiers attachés dans les emails. Au début de l'informatique, la table ASCII sur 7 bits comprend en début des caractères spéciaux comme le saut de ligne, le saut de page, le retour à la ligne, des codes pour la gestion du transfert sur ligne série ou via modem et en fin des cases vides ou utilisées spécifiquement selon les types d'imprimantes. Pour éviter toute perturbation lors de ces types de communication, le transfert ne devait pas comprendre ces caractères spéciaux. Il fallait donc procéder à un codage afin de contourner ce problème.
Attention, ce n'est pas du cryptage!
Table
Son but est de représenter n'importe quel information ou fichier, par exemple des exécutables ou des images, sous forme de texte simple sans caractère spécial ni lettre accentuée,... Il ne contient que les lettres de l'alphabet latin, minuscules et majuscules et les chiffres, ce qui nous donne 62 caractères.
En informatique, on travaille sur une base binaire et le plus proche de 62 est 64 ou 2 exposant 6, c'est à dire une base de 6 bits. Pour l'atteindre, il reste deux cases à remplir. On a ajouté les caractères un "+" et un "/". La table ci-dessous représente cette liste en correspondance avec sa valeur binaire.

Codage et décodage
Or depuis longtemps, l'informatique travaille sur 8 bits ou octet, sur 16 bits ou 32 bits tel UNICODE et plus pour les stockage de chiffres. Pour passer de ce fichier vers un fichier écrit sous forme du codage Base64, il faut effectuer une transformation ou codage et inversement ou décodage.
Le principe est de travailler sur le fichier d'origine en mode binaire pur dans se soucier de son type de codage d'origine. On découpe cette suite de bits en groupe de 6 bits. Chacun de ces groupes renvoie à une case de la table présentée ci-dessus. On en tire la lettre correspondante à la valeur binaire de ce groupe. On continue de proche en proche et on obtient un texte simple écrit en Base64. Un éditeur de texte simple ne risque pas de le transformer, ce qui arriverait si on faisait la même opération sur un fichier exécutable ou une image.
Pour montrer en pratique comment cela se passe, l'image ci-dessous vous l'explique. On a pris le texte "Hello!" selon le codage ASCII classique en 8 bits.
En dessous, chaque lettre est représentée sous forme binaire en 8 bits. Pour passer en Base64, cette seconde ligne binaire est découpée en lots de 6 bits (3ème ligne). On se reporte à notre table du dessus et à chaque lot de 6 bits, correspond une lettre (4ème ligne). Ce qui nous donne "SGVsbG8h" en Base64.

On a choisi la longueur de ce texte (6 caractères) car 8 bits * 6 caractères(ASCII) = 6 bits * 8 caractères(Base64) = 48 bits. On tombe sur un nombre de bits équivalents sans débordement. Mais c'est rarement le cas, en moyenne 1 cas sur 3.
Voyons le cas ci-dessous. On a supprimé le point d'exclamation final et à notre découpage, le dernier lot ne comporte que 4 bits; il manque deux bits. On ajoute 2 bits nuls ("00") pour atteindre nos 6 bits. On peut dès lors faire notre codage.
Mais lors du décodage, il faut connaitre cette entourloupe. On ajoute un signe égal ("=") ou "padding" à la fin pour signaler qu'il ne faut pas tenir compte des deux derniers bits lors de l'opération inverse. Nous avons au final le code en Base64 "SGVsbG8=".

Voyons le cas final, sur les trois, où il manque 4 bits.
Dans l'exemple ci-dessous, nous avons encore supprimé une lettre finale pour obtenir le mot "Hell".
On procède de la même façon. On ajoute 4 bits nuls ("00 00") pour atteindre nos 6 bits voulus. Et comme nous avons ajouté le double de bits nuls, on double le signe égal ("==").
Et on obtient le code en Base64 "SGVsbA==".

Exemples d'utilisation
Voici quelques exemples où vous pouvez les retrouver.
Emails
Ce codage est encore utilisé actuellement pour l'envoi de fichier attaché à votre mail. Quand on regarde le texte source du mail, en début du fichier attaché, on peut remarquer une ligne:
Content-Transfer-Encoding: base64
qui notifie que la suite de la section est codé sur cette base.
Vous pouvez extraire cette partie codée en Base64 et la décoder et renommer le fichier résultant d'après le nom de l'entête. Si c'est une image, vous pouvez la visionner. Attention, si vous travaillez sous Unix et que vous avez récupéré un fichier du texte source de messagerie à partir de MS Windows, il faut éliminer les "Carriage Return" de fin de ligne.
Certificats
Sous Unix, dans vos fichiers de configuration des serveurs Web (Apache ou HTTPD), de messagerie (Postfix et Dovecot) par exemple, vous faites appel à un certificat et à une clé. Dans ce fichier de certificat, supprimez la ligne d'entête et cette de clôture commençant par 5 tirets, pour test et procédez au décodage. Vous verrez apparaître les textes tels l'adresse mail, le pays, le nom de domaine,...
WireGuard
Dans les fichiers de configuration, on retrouve les clés privées et publiques des partenaires. Elles sont codées en Base64. Ces clés ont à la base une longueur de 32 octets.
Fonctions
Il existe de nombreux moyens pour effectuer le codage et le décodage. On voici un en commande de ligne:
- Décodage:
cat fichier.base64 | base64 --decode > fichier.resultant
On décode le fichier "fichier.base64" en exemple et on redirige le résultat dans le fichier "fichier.resultant".
- Encodage:
cat fichier.resultant| base64 > fichier.base64
En opération inverse.
Remarque
Ce codage augmente d'un tiers le volume du fichier codé. C'est ainsi que si vous voulez envoyer un fichier par mail, certains serveurs de messagerie limitent la taille des mails et c'est cette taille finale après codage Base64 qui est considérée. Et un fichier qui semble sous cette limite, peut être refusé pour cette raison de dépassement de taille.