Kuidas Base64 kodeering töötab

Sisukord:

Kuidas Base64 kodeering töötab
Kuidas Base64 kodeering töötab
Anonim

Base64 kodeering on binaarandmete teisendamine ASCII stringivormingusse, teisendades need binaarandmed 6-bitiseks märgiesitluseks. Base64 kodeerimismeetodit kasutatakse, kui binaarandmeid, näiteks pilte või videot, edastatakse süsteemide kaudu, mis on loodud andmete edastamiseks lihtteksti (ASCII) vormingus.

Miks kasutatakse Base64 kodeeringut?

Vajadus Base64 kodeeringu järele tuleneb probleemidest, mis tekivad, kui meediumi edastatakse töötlemata binaarvormingus tekstipõhistesse süsteemidesse.

Kuna tekstipõhised süsteemid (nagu e-post) tõlgendavad binaarandmeid suure hulga märkidena, sealhulgas spetsiaalsete käsumärkidena, tõlgendavad need süsteemid suurt osa meediumite edastamiseks edastatavatest binaarandmetest valesti ning need lähevad kaotsi või rikutakse edastusprotsess.

Image
Image

Üks meetod seda tüüpi binaarandmete kodeerimiseks viisil, mis väldib selliseid edastusprobleeme, on saata need lihtsa ASCII-tekstina Base64 kodeeritud vormingus. See on üks tehnikatest, mida MIME standard kasutab muude andmete kui lihtteksti saatmiseks.

Paljud programmeerimiskeeled, nagu PHP ja Javascript, sisaldavad Base64 kodeerimis- ja dekodeerimisfunktsioone, et tõlgendada Base64 kodeeringut kasutades edastatavaid andmeid.

Base64 kodeerimisloogika

Base64 kodeering jagab binaarandmed 3 täisbaidisteks 6-bitisteks segmentideks ja esindab neid prinditavate märkidena ASCII standardis. See teeb seda sisuliselt kahes etapis.

Esimene samm on binaarstringi jagamine 6-bitisteks plokkideks. Base64 kasutab ainult 6 bitti (vastab 2^6=64 tähemärgile), et tagada kodeeritud andmete prinditavus ja inimloetavus. Ühtegi ASCII-s saadaolevatest erimärkidest ei kasutata.

64 tähemärki (sellest ka nimi Base64) on 10 numbrit, 26 väiketähte, 26 suurtähte, samuti plussmärki (+) ja kaldkriipsu (/). Samuti on 65. märk, mida tuntakse kui padi, mis on võrdusmärk (=). Seda märki kasutatakse siis, kui binaarandmete viimane segment ei sisalda tervet 6 bitti.

Base64 kodeeringu näide

Võtke näiteks kolm ASCII numbrit 155, 162 ja 233. Need kolm numbrit moodustavad binaarvoo 100110111010001011101001. Binaarfail, nagu pilt, sisaldab binaarvoogu, mille pikkus on kümneid või nulli tuhandeid tuhandeid. ja ühed.

Kodeerija Base64 alustab kahendvoo tükeldamisega kuuest märgist koosnevateks rühmadeks: 100110 111010 001011 101001. Igaüks neist rühmitustest on 38, 58, 11 ja 41.

Kuuekohaline binaarvoog teisendab kahendkoodi (või 2. baasi) kümnendmärgiks (10 baasmärgiks), ruudustades iga väärtuse, mida binaarjadas esindab 1, oma asukoharuuduga. Alustades parem alt ja liikudes vasakule ning alustades nullist, tähistavad kahendvoo väärtused 2^0, siis 2^1, siis 2^2, siis 2^3, siis 2^4, siis 2^5.

Siin on veel üks viis selle vaatamiseks. Vasakult alustades on iga positsiooni väärtus 1, 2, 4, 8, 16 ja 32. Kui kahendarvu pesas on 1, lisate selle väärtuse; kui selle pesas on 0, siis mitte. Binaarne string 100110 teisendab kümnendarvuks 38: 02^01 + 12^1 + 12^2 + 02^3 + 02^4 + 12^5=0+2 +4+0+0+32.

Base64 kodeering võtab selle kahendstringi ja jagab selle 6-bitisteks väärtusteks 38, 58, 11 ja 41.

Lõpuks teisendatakse need numbrid Base64 kodeeringutabeli abil ASCII-märkideks. Selle näite 6-bitised väärtused tähendavad ASCII jada m6Lp.

Base64 teisendustabeli kasutamine:

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

Seda kaheastmelist protsessi rakendatakse kogu kodeeritud binaarstringile.

Tagamaks, et kodeeritud andmeid saab õigesti printida ja need ei ületa ühegi meiliserveri reapikkuse piirangut, lisatakse reavahetusmärgid, et rea pikkus oleks alla 76 tähemärgi. Reavahetuse märgid on kodeeritud nagu kõik muud andmed.

Base64 kodeeringu kogu eesmärk, alates täidise lisamisest 3-baidiste binaarsegmentide säilitamiseks kuni kahendfaili tekstiks teisendamiseni Base64 tabeli abil, on edastatud binaarteabe terviklikkuse säilitamine.

Base64 kodeeringutabel

Järgmine tabel tõlgib kõik Base64 kodeeringus kasutatud 64 märki.

Base64 kodeeringutabel
Väärtus Char Väärtus Char Väärtus Char Väärtus 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 /

Lõppmängu lahendamine

Kodeerimisprotsessi lõpus võib ilmneda probleem. Kui algandmete suurus baitides on kolmekordne, töötab kõik hästi. Kui see pole nii, võivad baidid olla tühjad. Õigeks kodeerimiseks on vaja täpselt 3-baiti binaarandmeid.

Lahendus on lisada 3-baidise rühma loomiseks piisav alt baite väärtusega 0. Kaks sellist väärtust lisatakse, kui andmed vajavad ühte täiendavat andmebaiti, üks lisatakse kahe lisabaidi jaoks.

Muidugi ei saa neid kunstlikke lõpp-0-sid alloleva kodeerimistabeli abil kodeerida. Neid peab esindama 65. märk. Base64 täidismärk on võrdusmärk (=) ja see asetatakse kodeeritud andmete lõppu.

Soovitan: