Sådan fungerer Base64-kodning

Base64-kodning er en proces til at konvertere binære data til et ASCII-strengformat ved at konvertere disse binære data til en 6-bit tegnrepræsentation. Base64-metoden til kodning bruges, når binære data, såsom billeder eller video, transmitteres over systemer, der er designet til at transmittere data i et almindeligt tekstformat (ASCII).

Hvorfor bruges Base64-kodning?

Behovet for Base64-kodning kommer fra de problemer, der opstår, når medier transmitteres ind rå binært format til tekstbaserede systemer.

Siden tekstbaserede systemer (som e-mail) fortolker binære data som en bred vifte af tegn, inklusive specielle kommandotegn, meget af de binære data der transmitteres til overførselsmedier misfortolkes af disse systemer og går tabt eller beskadiges i transmissionen behandle.

Mand ser på computerkoden på skærmen
Wutthichai Luemuang / EyeEm / Getty Images

En metode til at kode denne slags binære data på en måde, der undgår sådanne transmissionsproblemer, er at sende dem som almindelig ASCII-tekst i Base64-kodet format. Dette er en af ​​de teknikker, der anvendes af MIME-standarden til at sende andre data end almindelig tekst.

Mange programmeringssprog, såsom PHP og Javascript, inkluderer Base64-kodnings- og afkodningsfunktioner for at fortolke data transmitteret ved hjælp af Base64-kodning.

Base64-kodningslogik

Base64-kodning opdeler binære data i 6-bit segmenter på 3 fulde bytes og repræsenterer dem som printbare tegn i ASCII-standard. Det gør den i hovedsageligt to trin.

Det første trin er at bryde den binære streng ned i 6-bit blokke. Base64 bruger kun 6 bit (svarende til 2^6 = 64 tegn) for at sikre, at kodede data kan udskrives og læses af mennesker. Ingen af ​​de specialtegn, der er tilgængelige i ASCII, bruges.

De 64 tegn (deraf navnet Base64) er 10 cifre, 26 små bogstaver, 26 store bogstaver samt plustegnet (+) og skråstregen frem (/). Der er også en 65. karakter kendt som en pude, som er lighedstegnet (=). Dette tegn bruges, når det sidste segment af binære data ikke indeholder hele 6 bits.

Base64-kodningseksempel

Tag for eksempel tre ASCII-numre 155, 162 og 233. Disse tre tal udgør en binær strøm af 100110111010001011101001. En binær fil, ligesom et billede, indeholder en binær strøm, der kører for titusinder eller hundredtusindvis af nuller og enere.

En Base64-koder starter med at dele den binære strøm op i grupper på seks tegn: 100110 111010 001011 101001. Hver af disse grupperinger oversættes til tallene 38, 58, 11 og 41.

En seks-karakters binær strøm konverterer mellem binære (eller base-2) til decimale (base-10) tegn ved at kvadrere hver værdi repræsenteret af et 1 i den binære sekvens med dens positionelle kvadrat. Startende fra højre og bevæger sig til venstre, og startende med nul, repræsenterer værdierne i den binære strøm 2^0, så 2^1, så 2^2, så 2^3, så 2^4, så 2^5.

Her er en anden måde at se det på. Startende fra venstre er hver position værd 1, 2, 4, 8, 16 og 32. Hvis det binære tal har et 1 i pladsen, tilføjer du denne værdi; hvis den har et 0 i pladsen, har du ikke. Den binære streng 100110 konverteres til decimaltallet 38: 0*2^01 + 1*2^1 + 1*2^2 + 0*2^3 + 0*2^4 + 1*2^5 = 0+2 +4+0+0+32.

Base64-kodning tager denne binære streng og opdeler den i 6-bit værdierne 38, 58, 11 og 41.

Til sidst konverteres disse tal til ASCII-tegn ved hjælp af Base64-kodningstabellen. 6-bit værdierne i dette eksempel oversættes til ASCII-sekvensen m6Lp.

Brug af Base64-konverteringstabellen:

  • 38 er m
  • 58 er 6
  • 11 er L
  • 41 er s

Denne to-trins proces anvendes på hele den binære streng, der er kodet.

For at sikre, at de kodede data kan udskrives korrekt og ikke overskrider nogen mailservers linjelængdegrænse, indsættes nye linjetegn for at holde linjelængder under 76 tegn. Newline-tegnene er kodet som alle andre data.

Hele formålet med Base64-kodning, fra at tilføje polstring for at bevare 3-byte binære segmenter til at konvertere binær til tekst ved hjælp af Base64-tabellen er at bevare integriteten af ​​den transmitterede binære Information.

Base64-kodningstabel

Følgende tabel oversætter alle 64 tegn, der bruges i Base64-kodning.

Base64-kodningstabel
Værdi Char Værdi Char Værdi Char Værdi Char
0 EN 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 jeg 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 n 55 3
8 jeg 24 Y 40 o 56 4
9 J 25 Z 41 s 57 5
10 K 26 -en 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 /

Løsning af slutspillet

Ved afslutningen af ​​kodningsprocessen kan der være et problem. Hvis størrelsen af ​​de originale data i bytes er et multiplum af tre, fungerer alt fint. Hvis det ikke er det, kan der være tomme bytes. For korrekt kodning kræves nøjagtigt 3-bytes binære data.

Løsningen er at tilføje nok bytes med en værdi på 0 til at skabe en 3-byte gruppe. To sådanne værdier tilføjes, hvis dataene har brug for én ekstra byte data, én tilføjes for to ekstra bytes.

Naturligvis kan disse kunstige efterfølgende '0'er ikke kodes ved hjælp af indkodningstabellen nedenfor. De skal være repræsenteret af et 65. tegn. Base64-udfyldningstegnet er lighedstegnet (=) og placeres i slutningen af ​​kodede data.