Stel dat u een binair afbeeldingsbestand hebt dat u via een netwerk wilt overbrengen. Je staat er versteld van dat het bestand aan de andere kant niet goed is ontvangen - het bestand bevatte alleen vreemde tekens!
Nou, het lijkt erop dat je probeerde je bestand in de onbewerkte bits en bytes-indeling te verzenden, terwijl de gebruikte media was ontworpen voor het streamen van tekst.
Wat zou de oplossing zijn om zo'n probleem te voorkomen? Het antwoord is Base64-codering. In dit artikel zal ik je laten zien hoe we Python kunnen gebruiken om een binaire afbeelding te coderen en decoderen. Het programma wordt geïllustreerd als een op zichzelf staand lokaal programma, maar u kunt het concept toepassen op verschillende toepassingen, zoals het verzenden van uw gecodeerde afbeelding van uw mobiele apparaat naar een server en vele andere toepassingen.
Voordat we verder gaan met het artikel, laten we definiëren wat we bedoelen met Base64.
Base64 is een manier waarop 8-bits binaire gegevens worden gecodeerd in een indeling die kan worden weergegeven in 7 bits. Dit gebeurt alleen met behulp van de karakters AZ
, az
, 0-9
, +
, en /
om gegevens te representeren, met =
gebruikt om gegevens op te slaan. Met behulp van deze codering worden bijvoorbeeld drie 8-bits bytes geconverteerd naar vier 7-bits bytes.
De term Base64 is afkomstig van de MIME-standaard (Multipurpose Internet Mail Extensions), die veel wordt gebruikt voor HTTP en XML en oorspronkelijk is ontwikkeld voor het coderen van e-mailbijlagen voor verzending.
Base64 is erg belangrijk voor binaire gegevensrepresentatie, zodat binaire gegevens kunnen worden weergegeven op een manier die eruit ziet en fungeert als platte tekst, waardoor het betrouwbaarder is om te worden opgeslagen in databases, e-mails worden verzonden of worden gebruikt in tekstgebaseerde formaat zoals XML. Base64 wordt voornamelijk gebruikt voor het weergeven van gegevens in een ASCII-reeksindeling.
Zoals vermeld in de inleiding van dit artikel, kunnen zonder Base64 gegevens soms helemaal niet leesbaar zijn.
Base64-codering is het proces waarbij binaire gegevens worden geconverteerd naar een beperkte tekenset van 64 tekens. Zoals in het eerste gedeelte wordt getoond, zijn die tekens AZ
, az
, 0-9
, +
, en /
(tel ze, heb je gemerkt dat ze optellen tot 64?). Deze tekenset wordt beschouwd als de meest voorkomende tekenset en wordt MIME's Base64 genoemd. Het gebruikt AZ
, az
, 0-9
, +
, en /
voor de eerste 62 waarden, en +
, en /
voor de laatste twee waarden.
De Base64-gecodeerde gegevens zijn uiteindelijk langer dan de oorspronkelijke gegevens, zodat zoals hierboven vermeld, voor elke 3 bytes binaire gegevens er ten minste 4 bytes aan Base64-gecodeerde gegevens zijn. Dit komt door het feit dat we de gegevens in een kleiner aantal tekens uitpersen.
Heb je ooit een deel van een onbewerkt e-mailbestand gezien zoals hieronder (wat waarschijnlijk afkomstig is van een e-mail die niet wordt afgeleverd)? Als dat zo is, hebt u Base64-codering in actie gezien! (Als u "=" opmerkt, kunt u concluderen dat dit een Base64-codering is, omdat het gelijkteken wordt gebruikt in het coderingsproces voor opvulling.)
"plain Content-Type: text / plain; charset = UTF-8 Content-Transfer-Encoding: base64
2KfZhNiz2YTYp9mFINi52YTZitmD2YUg2YjYsdit2YXYqSDYp9mE2YTZhyDZiNio2LHZg9in2KrZ h9iMDQoNCtij2YjYryDZgdmC2Lcg2KfZhNin2LPYqtmB2LPYp9ixINi52YYg2KfZhNmF2YLYsdix 2KfYqiDYp9mE2K / Ysdin2LPZitipINin2YTYqtmKINiq2YbYtdit2YjZhiDYqNmH2Kcg2YTZhdmG INmK2LHZitivINin2YTYqtmI2LPYuSDZgdmKDQrYt9mE2Kgg2KfZhNi52YTZhSDYp9mE2LTYsdi5 2YrYjCDYudmE2YXYpyDYqNij2YbZiiDYutmK2LEg2YXYqtiu2LXYtSDYqNin2YTYudmE2YUg2KfZ hNi02LHYudmKINmI2KPZgdiq2YLYryDZhNmE2YXZhtmH2Kwg2KfZhNi52YTZhdmKDQrZhNiw2YTZ gy4NCg0K2KzYstin2YPZhSDYp9mE2YTZhyDYrtmK2LHYpyDYudmE2Ykg2YbYtdit2YPZhSDZgdmK INmH2LDYpyDYp9mE2LTYo9mGLg0KDQrYudio2K / Yp9mE2LHYrdmF2YYNCg == -089e0141aa264e929a0514593016 Content-Type: text / html; charset = UTF-8 Content-Transfer-Encoding: base64 "
Base64 wordt als volgt in meerdere stappen uitgevoerd:
Base64-decodering is het tegenovergestelde van Base64-codering. Met andere woorden, het wordt uitgevoerd door de stappen die in de vorige paragraaf zijn beschreven om te keren.
Dus, de stappen van Base64-decodering kunnen als volgt worden beschreven:
Laten we nu naar het vlees van dit artikel gaan. In deze sectie laat ik je zien hoe we Base64 gemakkelijk een afbeelding kunnen coderen met behulp van Python.
Ik zal de volgende binaire afbeelding gebruiken. Ga je gang, download het en laten we Python aan het rollen krijgen! (Ik neem aan dat de naam van de afbeelding dat is deer.gif
.)
Het eerste dat we moeten doen om Base64 in Python te gebruiken, is door de base64-module te importeren:
import base64
Om de afbeelding te coderen, gebruiken we eenvoudig de functie base64.encodestring (s)
. Python vermeldt het volgende met betrekking tot deze functie:
Codeer de tekenreeks s die willekeurige binaire gegevens kan bevatten en retourneer een tekenreeks die een of meer regels met base64-gecodeerde gegevens bevat. encodestring () retourneert een tekenreeks met een of meer regels met base64-gecodeerde gegevens altijd inclusief een extra achterliggende nieuwe regel ('\ n').
We kunnen dus het volgende doen om Base64 onze afbeelding te laten coderen:
plain import base64 image = open ('deer.gif', 'rb') #open binair bestand in leesmodus image_read = image.read () image_64_encode = base64.encodestring (image_read)
Als u de uitvoer van het coderingsproces wilt zien, typt u het volgende:
print afbeelding_64_encode
Om een afbeelding met Python te decoderen, gebruiken we eenvoudig de base64.decodestring (s)
functie. Python vermeldt het volgende met betrekking tot deze functie:
Decodeer de tekenreeks s, die een of meer regels met base64-gecodeerde gegevens moet bevatten, en retourneer een tekenreeks met de resulterende binaire gegevens.
Dus, om de afbeelding die we in het vorige gedeelte hebben gecodeerd te decoderen, doen we het volgende:
base64.decodestring (image_64_encode)
Laten we het programma plaatsen dat Base64 samen codeert en decodeert. Het Python-script dat dat doet zou er ongeveer als volgt uit moeten zien:
python import 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 = open ('deer_decode.gif', 'wb') # maak een schrijfbare afbeelding en schrijf het resultaat van de decodering image_result.write (image_64_decode)
Als je opent deer_decode.gif
die je op je bureaublad hebt, zul je merken dat je de originele afbeelding hebt deer.gif
we hebben in de eerste stap gecodeerd.
Zoals we in dit artikel hebben gezien, maakt Python het heel gemakkelijk om wat een complexe taak lijkt uit te voeren.
Leer Python met onze complete python-handleiding, of je nu net begint of dat je een ervaren coder bent die op zoek is naar nieuwe vaardigheden.