Hoe Base64-codering werkt

Inhoudsopgave:

Hoe Base64-codering werkt
Hoe Base64-codering werkt
Anonim

Base64-codering is een proces waarbij binaire gegevens worden geconverteerd naar een ASCII-tekenreeksformaat door die binaire gegevens om te zetten in een 6-bits tekenweergave. De Base64-coderingsmethode wordt gebruikt wanneer binaire gegevens, zoals afbeeldingen of video, worden verzonden via systemen die zijn ontworpen om gegevens in een indeling met platte tekst (ASCII) te verzenden.

Waarom wordt Base64-codering gebruikt?

De behoefte aan Base64-codering komt voort uit de problemen die optreden wanneer media in onbewerkte binaire indeling worden verzonden naar op tekst gebaseerde systemen.

Aangezien op tekst gebaseerde systemen (zoals e-mail) binaire gegevens interpreteren als een breed scala aan tekens, inclusief speciale opdrachttekens, wordt veel van de binaire gegevens die naar overdrachtsmedia worden verzonden, verkeerd geïnterpreteerd door die systemen en verloren of beschadigd in het transmissieproces.

Image
Image

Een methode om dit soort binaire gegevens te coderen op een manier die dergelijke transmissieproblemen vermijdt, is door ze te verzenden als gewone ASCII-tekst in Base64-gecodeerd formaat. Dit is een van de technieken die door de MIME-standaard worden gebruikt om andere gegevens dan platte tekst te verzenden.

Veel programmeertalen, zoals PHP en Javascript, bevatten Base64-coderings- en decoderingsfuncties om gegevens te interpreteren die worden verzonden met behulp van Base64-codering.

Base64-coderingslogica

Base64-codering breekt binaire gegevens op in 6-bits segmenten van 3 volledige bytes en vertegenwoordigt die als afdrukbare tekens in de ASCII-standaard. Het doet dat in twee stappen.

De eerste stap is om de binaire string op te splitsen in blokken van 6 bits. Base64 gebruikt slechts 6 bits (overeenkomend met 2^6=64 tekens) om ervoor te zorgen dat gecodeerde gegevens afdrukbaar en leesbaar zijn. Geen van de speciale tekens die beschikbaar zijn in ASCII worden gebruikt.

De 64 tekens (vandaar de naam Base64) zijn 10 cijfers, 26 kleine letters, 26 hoofdletters, evenals het plusteken (+) en de slash (/). Er is ook een 65e teken dat bekend staat als een pad, wat het gelijkteken is (=). Dit teken wordt gebruikt wanneer het laatste segment van binaire gegevens niet de volledige 6 bits bevat.

Base64-coderingsvoorbeeld

Neem bijvoorbeeld drie ASCII-nummers 155, 162 en 233. Deze drie getallen vormen een binaire stroom van 100110111010001011101001. Een binair bestand, zoals een afbeelding, bevat een binaire stroom die voor tien- of honderdduizenden nullen loopt en enen.

Een Base64-encoder begint met het opdelen van de binaire stroom in groepen van zes tekens: 100110 111010 001011 101001. Elk van deze groepen verta alt zich in de nummers 38, 58, 11 en 41.

Een binaire stroom van zes tekens converteert binaire (of grondtal-2) naar decimale (grondtal-10) tekens door elke waarde die wordt vertegenwoordigd door een 1 in de binaire reeks te kwadrateren met zijn positionele vierkant. Beginnend van rechts en naar links gaand, en beginnend met nul, vertegenwoordigen de waarden in de binaire stroom 2^0, dan 2^1, dan 2^2, dan 2^3, dan 2^4, dan 2^5.

Hier is een andere manier om ernaar te kijken. Vanaf links is elke positie 1, 2, 4, 8, 16 en 32 waard. Als het binaire getal een 1 in het slot heeft, tel je die waarde op; als er een 0 in de sleuf staat, doe je dat niet. De binaire string 100110 converteert naar het decimale getal 38: 02^01 + 12^1 + 12^2 + 02^3 + 02^4 + 12^5=0+2 +4+0+0+32.

Base64-codering neemt deze binaire reeks en splitst deze op in de 6-bits waarden 38, 58, 11 en 41.

Ten slotte worden deze getallen geconverteerd naar ASCII-tekens met behulp van de Base64-coderingstabel. De 6-bits waarden van dit voorbeeld vertalen zich naar de ASCII-reeks m6Lp.

De Base64-conversietabel gebruiken:

  • 38 is m
  • 58 is 6
  • 11 is L
  • 41 is p

Dit proces in twee stappen wordt toegepast op de gehele binaire tekenreeks die is gecodeerd.

Om ervoor te zorgen dat de gecodeerde gegevens correct kunnen worden afgedrukt en de limiet van de regellengte van een mailserver niet overschrijden, worden nieuwe regeltekens ingevoegd om de regellengte onder de 76 tekens te houden. De tekens van de nieuwe regel zijn gecodeerd zoals alle andere gegevens.

Het hele doel van Base64-codering, van het toevoegen van opvulling om 3-byte binaire segmenten te behouden tot het converteren van binair naar tekst met behulp van de Base64-tabel, is om de integriteit van de verzonden binaire informatie te behouden.

Base64-coderingstabel

De volgende tabel verta alt alle 64 tekens die worden gebruikt in Base64-codering.

Base64-coderingstabel
Waarde Char Waarde Char Waarde Char Waarde Char
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /

Het eindspel oplossen

Aan het einde van het coderingsproces is er mogelijk een probleem. Als de grootte van de originele gegevens in bytes een veelvoud van drie is, werkt alles goed. Als dit niet het geval is, kunnen er lege bytes zijn. Voor een juiste codering is exact 3 bytes aan binaire gegevens nodig.

De oplossing is om voldoende bytes toe te voegen met een waarde van 0 om een groep van 3 bytes te maken. Twee van dergelijke waarden worden toegevoegd als de gegevens één extra byte aan gegevens nodig hebben, één wordt toegevoegd voor twee extra bytes.

Natuurlijk kunnen deze kunstmatige volgnullen niet worden gecodeerd met behulp van de onderstaande coderingstabel. Ze moeten worden weergegeven door een 65e teken. Het Base64-opvulteken is het gelijkteken (=) en wordt aan het einde van gecodeerde gegevens geplaatst.

Aanbevolen: