Kaip veikia „Base64“kodavimas

Turinys:

Kaip veikia „Base64“kodavimas
Kaip veikia „Base64“kodavimas
Anonim

Base64 kodavimas yra dvejetainių duomenų konvertavimo į ASCII eilutės formatą procesas, konvertuojant tuos dvejetainius duomenis į 6 bitų simbolių atvaizdą. „Base64“kodavimo metodas naudojamas, kai dvejetainiai duomenys, pvz., vaizdai ar vaizdo įrašas, perduodami sistemomis, kurios skirtos duomenims perduoti paprasto teksto (ASCII) formatu.

Kodėl naudojama Base64 koduotė?

Base64 kodavimo poreikis kyla dėl problemų, kylančių, kai laikmena neapdorotu dvejetainiu formatu perduodama į teksto sistemas.

Kadangi tekstinės sistemos (pvz., el. paštas) dvejetainius duomenis interpretuoja kaip daugybę simbolių, įskaitant specialius komandų simbolius, daugelis dvejetainių duomenų, perduodamų medijai perduoti, yra neteisingai interpretuojami tose sistemose ir pamesta arba sugadinami perdavimo procesas.

Image
Image

Vienas būdas užkoduoti tokio tipo dvejetainius duomenis taip, kad būtų išvengta tokių perdavimo problemų, yra siųsti juos kaip paprastą ASCII tekstą Base64 koduotu formatu. Tai vienas iš metodų, naudojamų MIME standarte duomenims, išskyrus paprastą tekstą, siųsti.

Daugelyje programavimo kalbų, tokių kaip PHP ir Javascript, yra Base64 kodavimo ir dekodavimo funkcijos, kad būtų galima interpretuoti duomenis, perduodamus naudojant Base64 koduotę.

Base64 kodavimo logika

Base64 kodavimas suskaido dvejetainius duomenis į 6 bitų segmentus po 3 pilnus baitus ir vaizduoja juos kaip spausdinamus ASCII standarto simbolius. Tai atliekama iš esmės dviem etapais.

Pirmasis žingsnis yra dvejetainę eilutę suskaidyti į 6 bitų blokus. „Base64“naudoja tik 6 bitus (atitinka 2^6=64 simbolius), kad užtikrintų, jog užkoduoti duomenys būtų spausdinami ir skaitomi žmogaus. Nė vienas iš specialiųjų ASCII simbolių nenaudojamas.

64 simboliai (iš čia ir pavadinimas Base64) yra 10 skaitmenų, 26 mažosios raidės, 26 didžiosios raidės, taip pat pliuso ženklas (+) ir pasvirasis brūkšnys (/). Taip pat yra 65-asis simbolis, žinomas kaip bloknotas, kuris yra lygybės ženklas (=). Šis simbolis naudojamas, kai paskutiniame dvejetainių duomenų segmente nėra visų 6 bitų.

Base64 kodavimo pavyzdys

Pavyzdžiui, paimkite tris ASCII skaičius 155, 162 ir 233. Šie trys skaičiai sudaro dvejetainį 100110111010001011101001 srautą. Dvejetainis failas, kaip ir vaizdas, turi dvejetainį srautą, kurio srautas siekia dešimtis ar šimtus tūkstančių. ir vienus.

A Base64 koduotuvas pradeda suskaidydamas dvejetainį srautą į šešių simbolių grupes: 100110 111010 001011 101001. Kiekviena iš šių grupių paverčiama skaičiais 38, 58, 11 ir 41..

Šešių simbolių dvejetainis srautas konvertuoja iš dvejetainių (arba 2 bazinių) į dešimtainius (bazinis-10) simbolius, kiekvieną dvejetainėje sekoje pavaizduotą reikšmę 1 paverčiant jos padėties kvadratu. Pradedant iš dešinės ir judant į kairę, pradedant nuo nulio, dvejetainio srauto reikšmės reiškia 2^0, tada 2^1, tada 2^2, tada 2^3, tada 2^4, tada 2^5.

Štai kitas būdas pažvelgti į tai. Pradedant nuo kairės, kiekviena pozicija yra verta 1, 2, 4, 8, 16 ir 32. Jei dvejetainio skaičiaus lizde yra 1, jūs pridedate šią reikšmę; jei jo lizde yra 0, jūs neturite. Dvejetainė eilutė 100110 konvertuojama į dešimtainį skaičių 38: 02^01 + 12^1 + 12^2 + 02^3 + 02^4 + 12^5=0+2 +4+0+0+32.

Base64 kodavimas paima šią dvejetainę eilutę ir suskaido ją į 6 bitų reikšmes 38, 58, 11 ir 41.

Galiausiai šie skaičiai konvertuojami į ASCII simbolius naudojant „Base64“kodavimo lentelę. Šio pavyzdžio 6 bitų reikšmės paverčiamos ASCII seka m6Lp.

Naudojant Base64 konvertavimo lentelę:

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

Šis dviejų etapų procesas taikomas visai užkoduotai dvejetainei eilutei.

Siekiant užtikrinti, kad užkoduoti duomenys būtų tinkamai atspausdinti ir neviršytų jokio pašto serverio eilutės ilgio limito, įterpiami naujos eilutės simboliai, kad eilutės ilgis būtų mažesnis nei 76 simboliai. Naujos eilutės simboliai užkoduojami kaip ir visi kiti duomenys.

Visas Base64 kodavimo tikslas – nuo užpildymo, kad būtų išsaugoti 3 baitų dvejetainiai segmentai ir baigiant dvejetainės versijos konvertavimu į tekstą naudojant Base64 lentelę, yra išsaugoti perduodamos dvejetainės informacijos vientisumą.

Base64 kodavimo lentelė

Ši lentelė išverčia visus 64 simbolius, naudojamus Base64 koduotėje.

Base64 kodavimo lentelė
Vertė Char Vertė Char Vertė Char Vertė 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 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 /

Pabaigos sprendimas

Kodavimo proceso pabaigoje gali kilti problemų. Jei pradinių duomenų dydis baitais yra trijų kartotinis, viskas veikia gerai. Jei ne, gali būti tuščių baitų. Norint tinkamai koduoti, reikia tiksliai 3 baitų dvejetainių duomenų.

Sprendimas yra pridėti pakankamai baitų, kurių vertė yra 0, kad būtų sukurta 3 baitų grupė. Dvi tokios reikšmės pridedamos, jei duomenims reikia vieno papildomo duomenų baito, viena pridedama dviem papildomiems baitams.

Žinoma, šių dirbtinių 0-ių negalima užkoduoti naudojant toliau pateiktą kodavimo lentelę. Jie turi būti pavaizduoti 65 simboliu. „Base64“užpildymo simbolis yra lygybės ženklas (=) ir yra užkoduotų duomenų pabaigoje.

Rekomenduojamas: