A quoi sert l’encodage base 64?

J’ai entendu des gens parler de “codage en base 64” ici et là. A quoi cela sert?

    Lorsque vous avez des données binarys à transmettre sur un réseau, vous ne le faites généralement pas en diffusant simplement les bits et les octets sur le fil au format brut. Pourquoi? car certains médias sont conçus pour diffuser du texte. Vous ne savez jamais – certains protocoles peuvent interpréter vos données binarys comme des caractères de contrôle (comme un modem), ou vos données binarys peuvent être gâchées car le protocole sous-jacent peut penser que vous avez entré une combinaison de caractères spéciaux (comme terminaisons).

    Pour contourner ce problème, les utilisateurs encodent les données binarys en caractères. Base64 est l’un de ces types de codages.

    Pourquoi 64?
    Parce que vous pouvez généralement compter sur les mêmes 64 caractères dans de nombreux jeux de caractères, vous pouvez être raisonnablement sûr que vos données vont se retrouver de l’autre côté de la chaîne.

    C’est essentiellement un moyen d’encoder des données binarys arbitraires en texte ASCII. Il faut 4 caractères par 3 octets de données, é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 AZ, az, 0-9 et + et /, avec = comme caractère de remplissage. Il existe des variantes sécurisées par URL.

    Wikipedia est une bonne source d’informations.

    L’encodage Base-64 est un moyen de prendre des données binarys et de les transformer en texte pour qu’elles soient plus facilement transmises dans des éléments tels que le courrier électronique et les données de formulaire HTML.

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

    C’est un encodage textuel de données binarys où le texte résultant n’a que des lettres, des chiffres et les symboles “+”, “/” et “=”. C’est un moyen pratique de stocker / transmettre des données binarys sur des supports spécifiquement utilisés pour les données textuelles.

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

    1. Decimal: stocke la valeur décimale de chaque octet sous la forme de trois chiffres: 045 112 101 037, etc., où chaque octet est représenté par 3 octets. Les données gonflent trois fois.
    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 gonflent deux fois.

    Base-64 mappe 3 octets (8 x 3 = 24 bits) en 4 caractères couvrant 6 bits (6 x 4 = 24 bits). Le résultat ressemble à “TWFuIGlzIGRpc3Rpb …”. Par conséquent, le gonflement n’est qu’un simple 4/3 = 1,3333333 fois l’original.

    Outre ce qui a déjà été dit, deux utilisations très courantes qui n’ont pas été listées sont:

    Hashes:

    Les hachages sont des fonctions unidirectionnelles qui transforment un bloc d’octets en un autre bloc d’octets de taille fixe tels que 128 bits ou 256 bits (SHA / MD5). La conversion des octets résultants en Base64 facilite l’affichage du hachage, en particulier lorsque vous comparez une sum de contrôle pour l’intégrité. Les hachages sont si souvent vus dans Base64 que beaucoup de gens confondent Base64 avec un hash.

    Cryptographie:

    Une clé de cryptage ne devant pas nécessairement être du texte mais des octets bruts, il est parfois nécessaire de la stocker dans un fichier ou une firebase database, ce qui est pratique pour Base64. Même avec les octets chiffrés résultants.

    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 convertir la chaîne Base64 en ses octets d’origine. Il ne doit donc pas être utilisé comme moyen de protection des données, uniquement en tant que format pour afficher ou stocker plus facilement les octets bruts.

    Des certificates

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

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

    Le terme Base64 fait référence à un codage de transfert de contenu MIME spécifique. Il est également utilisé comme terme générique pour tout schéma de codage similaire qui code des données binarys en les traitant numériquement et en les traduisant en une représentation de base 64. Le choix particulier de la base est dû à l’historique de l’encodage du jeu de caractères: on peut choisir un jeu de 64 caractères faisant partie du sous-ensemble commun à la plupart des encodages et également imprimable. Cette combinaison laisse peu de chances de modifier les données lors du transit via des systèmes, tels que le courrier électronique, qui n’étaient traditionnellement pas nettoyés sur 8 bits.

    Base64 peut être utilisé dans divers contextes:

    • Evolution et Thunderbird utilisent Base64 pour masquer les mots de passe de messagerie [1]
    • Base64 peut être utilisé pour transmettre et stocker du texte qui pourrait sinon provoquer une collision par délimiteur
    • Base64 est souvent utilisé comme raccourci rapide mais peu sûr pour masquer des secrets sans engendrer la surcharge de la gestion des clés cryptographiques.

    • Les spammeurs utilisent Base64 pour échapper aux outils anti-spam de base, qui souvent ne décodent pas Base64 et ne peuvent donc pas détecter les mots-clés dans les messages codés.

    • Base64 est utilisé pour encoder des chaînes de caractères dans les fichiers LDIF
    • Base64 est parfois utilisé pour incorporer des données binarys dans un fichier XML, en utilisant une syntaxe similaire à …… par exemple bookmarks.html de Firefox.
    • Base64 est également utilisé lors de la communication avec les périphériques d’impression de signature fiscale du gouvernement (généralement, via des ports série ou parallèles) afin de minimiser le délai lors du transfert des caractères de réception pour la signature.
    • Base64 est utilisé pour encoder des fichiers binarys tels que des images dans des scripts, pour éviter de dépendre de fichiers externes.
    • Peut être utilisé pour incorporer des données d’image brutes dans une propriété CSS telle que background-image.

    Dans les premiers temps des ordinateurs, lorsque la communication inter-systèmes de la ligne téléphonique n’était pas particulièrement fiable, une méthode rapide et sale de vérification de l’intégrité des données était utilisée: “bit parity”. Dans cette méthode, chaque octet transmis aurait 7 bits de données, et le 8 serait 1 ou 0, pour que le nombre total de 1 bits dans l’octet soit pair.

    Par conséquent, 0x01 serait transmise en tant que 0x81; 0x02 serait 0x82; 0x03 restrait 0x03 etc.

    Pour améliorer ce système, lorsque le jeu de caractères ASCII était défini, seuls les caractères 00-7F étaient affectés. (Encore aujourd’hui, tous les caractères de la gamme 80-FF sont non standard)

    De nombreux routeurs du jour placent le contrôle de parité et la traduction des octets dans le matériel, forçant les ordinateurs qui leur sont connectés à gérer ssortingctement les données 7 bits. Cela force les pièces jointes (et toutes les autres données, ce qui explique pourquoi les protocoles HTTP et SMTP sont basés sur du texte), à ​​convertir en un format texte uniquement.

    Peu de routeurs ont survécu dans les années 90. Je doute fort qu’aucun d’entre eux ne soit utilisé aujourd’hui.

    Certains protocoles de transport permettent uniquement la transmission de caractères alphanumériques. Imaginez une situation où les caractères de contrôle sont utilisés pour déclencher des actions spéciales et / ou qui ne supportent qu’une largeur de bit limitée par caractère. Base64 transforme toute entrée en un encodage qui n’utilise que des caractères alphanumériques, + , / et = comme caractère de remplissage.

    L’utilisation de Base64 que je vais décrire ici est un peu un hack. Donc, si vous n’aimez pas les hacks, veuillez ne pas continuer.

    J’ai eu des problèmes lorsque j’ai découvert que MySQL utf8 ne supporte pas les caractères Unicode de 4 octets car il utilise une version de 3 octets de utf8. Alors, qu’est-ce que j’ai fait pour supporter unicode complet de 4 octets sur MySQL? Eh bien, base64 encode les chaînes lors du stockage dans la firebase database et base64 décode lors de la récupération.

    L’encodage et le décodage en base64 étant très rapides, ce qui précède a parfaitement fonctionné.

    Vous avez les points suivants à prendre en compte:

    • L’encodage Base64 utilise 33% de stockage en plus

    • Les chaînes stockées dans la firebase database ne seront pas lisibles par l’homme (vous pourriez vendre cela comme une fonctionnalité que les chaînes de firebase database utilisent un cryptage de base).

    Vous pouvez utiliser la méthode ci-dessus pour tout moteur de stockage ne prenant pas en charge unicode.

    Il est utilisé pour convertir des données binarys arbitraires en texte ASCII.

    Par exemple, les pièces jointes au courrier électronique sont envoyées de cette façon.

    Je l’utilise dans un sens pratique lorsque nous transférons de gros objects binarys (images) via des services Web. Ainsi, lorsque je teste un service Web C # à l’aide d’un script python, l’object binary peut être recréé avec un peu de magie.

    [En python]

     import base64 imageAsBytes = base64.b64decode( dataFromWS ) 

    La plupart du temps, je l’ai vu pour encoder des données binarys dans des contextes qui ne peuvent traiter que des jeux de caractères ascii ou simples.

    Pour en savoir un peu plus sur ce que dit Brad: de nombreux mécanismes de transport pour le courrier électronique et Usenet et d’autres méthodes de déplacement des données ne sont pas «8 bits propres», ce qui signifie que des caractères extérieurs au jeu de caractères ascii standard 0x0D peut être vu comme un retour chariot et transformé en un retour chariot et un saut de ligne. Base 64 mappe tous les caractères binarys en plusieurs lettres, chiffres et signes de ponctuation ascii standard pour qu’ils ne soient pas mutilés de cette manière.

    «Les schémas d’encodage Base64 sont couramment utilisés lorsqu’il est nécessaire de coder des données binarys devant être stockées et transférées sur des supports conçus pour traiter des données textuelles. C’est pour s’assurer que les données restnt intactes sans modification pendant le transport »(Wiki, 2017)

    Voici un exemple: vous disposez d’un service Web qui accepte uniquement les caractères ASCII. Vous souhaitez enregistrer puis transférer les données de l’utilisateur vers un autre emplacement (API), mais les destinataires souhaitent recevoir des données intactes. Base64 est pour ça. . . Le seul inconvénient est que l’encodage base64 nécessite environ 33% d’espace supplémentaire par rapport aux chaînes normales.

    Un autre exemple :: uenc = url encoded = aHR0cDovL2xvYy5tYWdlbnRvLmNvbS9hc2ljcy1tZW4tcy1nZWwta2F5YW5vLXhpaS5odG1s = http://loc.querytip.com/asics-men-s-gel-kayano-xii.html .

    Comme vous pouvez le voir, nous ne pouvons pas mettre char “/” dans l’URL si nous voulons envoyer la dernière URL visitée en tant que paramètre, car nous allons rompre la règle atsortingbut / valeur pour le paramètre “MOD rewrite” – GET.

    Un exemple complet serait: “ http://loc.querytip.com/checkout/cart/add/uenc/http://loc.magento.com/asics-men-s-gel-kayano-xii.html/product / 93 / ”

    Base64

    Base64 est un terme générique pour un certain nombre de schémas d’encodage similaires qui encodent des données binarys en les traitant numériquement et en les traduisant en une représentation de base 64. Le terme Base64 provient d’un codage de transfert de contenu MIME spécifique.

    Les schémas d’encodage Base64 sont couramment utilisés lorsqu’il est nécessaire de coder des données binarys devant être stockées et transférées sur des supports conçus pour traiter des données textuelles. Cela permet de garantir que les données restnt intactes sans modification au cours du transport. Base64 est couramment utilisé dans un certain nombre d’applications, notamment le courrier électronique via MIME, et le stockage de données complexes en XML.

    Base64 peut être utilisé à plusieurs fins.

    La principale raison est de convertir des données binarys en quelque chose de passable.

    Je l’utilise parfois pour transmettre des données JSON d’un site à un autre, stocker des informations dans des cookies sur un utilisateur.

    Note: Vous pouvez “l’utiliser” pour le cryptage – je ne vois pas pourquoi les gens disent que vous ne pouvez pas, et que ce n’est pas un cryptage, bien qu’il soit facilement cassable et mal vu. Le chiffrement ne signifie rien de plus que la conversion d’une chaîne de données en une autre chaîne de données pouvant être déchiffrée ultérieurement ou non, et c’est ce que fait base64.