Encodage et décodage Base64 à l'aide de Python

Supposons que vous souhaitiez transférer un fichier image binaire sur un réseau. Vous êtes surpris que le fichier n'ait pas été reçu correctement de l'autre côté. Le fichier ne contenait que des caractères étranges.!

Eh bien, il semble que vous ayez tenté d’envoyer votre fichier au format brut, en octets, alors que le support utilisé était conçu pour la transmission de texte en continu..

Quelle serait la solution de contournement pour éviter un tel problème? La réponse est le codage Base64. Dans cet article, je vais vous montrer comment utiliser Python pour encoder et décoder une image binaire. Le programme est illustré en tant que programme local autonome, mais vous pouvez appliquer le concept à différentes applications, telles que l'envoi de votre image codée depuis votre appareil mobile vers un serveur et de nombreuses autres applications..

Qu'est-ce que Base64?

Avant d'aller plus loin dans l'article, définissons ce que nous entendons par Base64.

Base64 est un moyen de coder des données binaires de 8 bits dans un format pouvant être représenté sur 7 bits. Ceci est fait en utilisant seulement les caractères A à Z, a-z, 0-9, +, et / afin de représenter des données, avec = utilisé pour compléter les données. Par exemple, en utilisant ce codage, trois octets de 8 bits sont convertis en quatre octets de 7 bits..

Le terme Base64 est issu du standard MIME (Multipurpose Internet Mail Extensions), largement utilisé pour HTTP et XML, et qui a été développé à l'origine pour coder les pièces jointes des courriers électroniques en vue de leur transmission..

Pourquoi utilisons-nous Base64?

Base64 est très important pour la représentation des données binaires, car il permet de représenter les données binaires de manière à ce qu’elles ressemblent à du texte brut, ce qui permet de les stocker de manière plus fiable dans des bases de données, dans des courriers électroniques ou dans des textes. format tel que XML. Base64 est essentiellement utilisé pour représenter des données dans un format de chaîne ASCII.

Comme mentionné dans l'introduction de cet article, sans Base64, les données ne seront parfois pas lisibles..

Encodage Base64

Le codage Base64 est le processus de conversion de données binaires en un jeu de caractères limité de 64 caractères. Comme indiqué dans la première section, ces caractères sont A à Z, a-z, 0-9, +, et / (comptez-les, avez-vous remarqué qu'ils totalisent 64?). Ce jeu de caractères est considéré comme le jeu de caractères le plus commun. Il est appelé Base64 de MIME. Il utilise A à Z, a-z, 0-9, +, et / pour les 62 premières valeurs, et +, et / pour les deux dernières valeurs.

Les données codées en Base64 finissent par être plus longues que les données d'origine, de sorte que, comme indiqué ci-dessus, pour 3 octets de données binaires, il existe au moins 4 octets de données codées en Base64. Cela est dû au fait que nous comprimons les données dans un jeu de caractères plus petit..

Avez-vous déjà vu une partie d'un fichier de courrier électronique brut tel que celui présenté ci-dessous (qui provient probablement d'un courrier électronique qui n'a pas été livré)? Si c'est le cas, alors vous avez vu l'encodage Base64 en action! (Si vous remarquez “=”, vous pouvez en déduire qu'il s'agit d'un codage Base64, car le signe égal est utilisé dans le processus de codage pour le remplissage.)

"plain Content-Type: text / plain; jeu de caractères = UTF-8 codage de transfert de contenu: base64

2KfZhNiz2YTYp9mFINi52YTZitmD2YUg2YjYsdit2YXYqSDYp9mE2YTZhyDZiNio2LHZg9in2KrZ h9iMDQoNCtij2YjYryDZgdmC2Lcg2KfZhNin2LPYqtmB2LPYp9ixINi52YYg2KfZhNmF2YLYsdix 2KfYqiDYp9mE2K / Ysdin2LPZitipINin2YTYqtmKINiq2YbYtdit2YjZhiDYqNmH2Kcg2YTZhdmG INmK2LHZitivINin2YTYqtmI2LPYuSDZgdmKDQrYt9mE2Kgg2KfZhNi52YTZhSDYp9mE2LTYsdi5 2YrYjCDYudmE2YXYpyDYqNij2YbZiiDYutmK2LEg2YXYqtiu2LXYtSDYqNin2YTYudmE2YUg2KfZ hNi02LHYudmKINmI2KPZgdiq2YLYryDZhNmE2YXZhtmH2Kwg2KfZhNi52YTZhdmKDQrZhNiw2YTZ gy4NCg0K2KzYstin2YPZhSDYp9mE2YTZhyDYrtmK2LHYpyDYudmE2Ykg2YbYtdit2YPZhSDZgdmK INmH2LDYpyDYp9mE2LTYo9mGLg0KDQrYudio2K / Yp9mE2LHYrdmF2YYNCg == -089e0141aa264e929a0514593016 Content-Type: text / html; jeu de caractères = codage de transfert de contenu UTF-8: base64 "

Base64 est réalisé en plusieurs étapes, comme suit:

  • Le texte à coder est converti en ses valeurs décimales respectives, c’est-à-dire en leurs équivalents ASCII (c’est-à-dire a: 97, b: 98, etc.). Voici la table ASCII.
  • Les valeurs décimales obtenues à l'étape ci-dessus sont converties en leurs équivalents binaires (c'est-à-dire 97: 01100001)..
  • Tous les équivalents binaires sont concaténés, obtenant un grand ensemble de nombres binaires.
  • Le grand ensemble de nombres binaires est divisé en sections égales, chaque section ne contenant que 6 bits.
  • Les ensembles égaux de 6 bits sont convertis en leurs équivalents décimaux.
  • Enfin, les équivalents décimaux sont convertis en leurs valeurs Base64 (c'est-à-dire 4: E). Voici les valeurs décimales et leur alphabet Base64.

Décodage en base64

Le décodage Base64 est l'opposé du codage Base64. En d’autres termes, elle est réalisée en inversant les étapes décrites dans la section précédente..

Ainsi, les étapes du décodage Base64 peuvent être décrites comme suit:

  • Chaque caractère de la chaîne est remplacé par sa valeur décimale Base64.
  • Les valeurs décimales obtenues sont converties en leurs équivalents binaires.
  • Les deux premiers bits des nombres binaires sont tronqués de chacun des nombres binaires obtenus et les ensembles de 6 bits sont combinés, formant une grande chaîne de chiffres binaires..
  • La grande chaîne de chiffres binaires obtenue à l'étape précédente est divisée en groupes de 8 bits.
  • Les nombres binaires de 8 bits sont convertis en leurs équivalents décimaux.
  • Enfin, les valeurs décimales obtenues sont converties en leur équivalent ASCII..

Encodage d'une image

Passons maintenant à la viande de cet article. Dans cette section, je vais vous montrer comment nous pouvons facilement encoder une image en Base64 en utilisant Python..

Je vais utiliser l'image binaire suivante. Allez-y, téléchargez-le et passons à Python! (Je suppose que le nom de l'image est deer.gif.)

La première chose à faire pour utiliser Base64 en Python est d'importer le module base64:

importer en base64

Pour encoder l'image, nous utilisons simplement la fonction base64.encodestring (s). Python mentionne les éléments suivants concernant cette fonction:

Encodez la chaîne s, qui peut contenir des données binaires arbitraires, et renvoyez une chaîne contenant une ou plusieurs lignes de données codées en base64. encodestring () renvoie une chaîne contenant une ou plusieurs lignes de données codées en base64, toujours avec une nouvelle ligne de fin supplémentaire ('\ n').

Ainsi, nous pouvons procéder comme suit pour coder notre image en Base64:

importation simple base64 image = open ('deer.gif', 'rb') # fichier binaire ouvert en mode lecture image_read = image.read () image_64_encode = base64.encodestring (image_read)

Si vous souhaitez voir la sortie du processus de codage, tapez ce qui suit:

print image_64_encode

Décoder une image

Pour décoder une image en Python, nous utilisons simplement le base64.decodestring (s) une fonction. Python mentionne les éléments suivants concernant cette fonction:

Décode la chaîne s, qui doit contenir une ou plusieurs lignes de données codées en base64, et renvoie une chaîne contenant les données binaires obtenues..

Ainsi, afin de décoder l'image encodée dans la section précédente, nous procédons comme suit:

base64.decodestring (image_64_encode)

Mettre tous ensemble

Mettons le programme que Base64 code et décode une image ensemble. Le script Python qui fait cela devrait ressembler à ceci:

import python base64 image = open ('deer.gif', 'rb') image_read = image.read () image_64_encode = base64.encodestring (image_read) image_64_decode = base64.decodestring (image_64_encode) image_result = ouvert ('deer_decodegif' 'wb') # crée une image inscriptible et écrit le résultat du décodage image_result.write (image_64_decode)

Si vous ouvrez deer_decode.gif que vous avez sur votre bureau, vous remarquerez que vous avez l'image originale deer.gif nous avons encodé dans la première étape.

Comme nous l’avons vu dans cet article, Python facilite très bien l’exécution de ce qui semble être une tâche complexe..

Apprendre le python

Apprenez Python avec notre guide complet de tutoriel sur Python, que vous soyez débutant ou que vous soyez un codeur chevronné cherchant à acquérir de nouvelles compétences..