Cum funcționează codificarea Base64

Codarea Base64 este un proces de conversie a datelor binare într-un format de șir ASCII prin conversia acelor date binare într-o reprezentare de caractere pe 6 biți. Metoda de codificare Base64 este utilizată atunci când datele binare, cum ar fi imagini sau video, sunt transmise prin sisteme care sunt proiectate să transmită date într-un format text simplu (ASCII).

De ce este folosită codificarea Base64?

Necesitatea codificării Base64 provine din problemele care apar atunci când media este transmisă format binar brut la sisteme bazate pe text.

Deoarece sistemele bazate pe text (cum ar fi e-mail) interpretează datele binare ca o gamă largă de caractere, inclusiv caractere speciale de comandă, o mare parte din datele binare care este transmis pe medii de transfer este interpretat greșit de acele sisteme și pierdut sau corupt în transmisie proces.

Bărbat care se uită la codul computerului pe ecran
Wutthichai Luemuang / EyeEm / Getty Images

O metodă de codificare a acestui tip de date binare într-un mod care să evite astfel de probleme de transmisie este să le trimiteți ca text simplu ASCII în format codificat Base64. Aceasta este una dintre tehnicile utilizate de standardul MIME pentru a trimite alte date decât text simplu.

Multe limbaje de programare, cum ar fi PHP și Javascript, includ funcții de codificare și decodare Base64 pentru a interpreta datele transmise folosind codificarea Base64.

Logica de codare Base64

Codificarea Base64 împarte datele binare în segmente de 6 biți de 3 octeți întregi și le reprezintă ca caractere imprimabile în standardul ASCII. O face în esență în doi pași.

Primul pas este să spargeți șirul binar în blocuri de 6 biți. Base64 folosește doar 6 biți (corespunzând la 2^6 = 64 de caractere) pentru a se asigura că datele codificate sunt imprimabile și pot fi citite de om. Niciunul dintre caracterele speciale disponibile în ASCII nu este folosit.

Cele 64 de caractere (de unde și numele Base64) sunt 10 cifre, 26 de caractere minuscule, 26 de caractere mari, precum și semnul Plus (+) și Forward Slash (/). Există, de asemenea, un al 65-lea personaj cunoscut sub numele de a pad, care este semnul Egal (=). Acest caracter este folosit atunci când ultimul segment de date binare nu conține 6 biți.

Exemplu de codificare Base64

De exemplu, luați trei numere ASCII 155, 162 și 233. Aceste trei numere constituie un flux binar de 100110111010001011101001. Un fișier binar, ca o imagine, conține un flux binar care rulează pentru zeci sau sute de mii de zerouri și unu.

Un encoder Base64 începe prin a fragmenta fluxul binar în grupări de șase caractere: 100110 111010 001011 101001. Fiecare dintre aceste grupări se traduce în numerele 38, 58, 11 și 41.

Un flux binar de șase caractere convertește caractere binare (sau bază-2) în zecimale (bază-10) prin pătrarea fiecărei valori reprezentate de un 1 în secvența binară cu pătratul său pozițional. Pornind de la dreapta și deplasându-se la stânga și începând cu zero, valorile din fluxul binar reprezintă 2^0, apoi 2^1, apoi 2^2, apoi 2^3, apoi 2^4, apoi 2^5.

Iată un alt mod de a-l privi. Începând din stânga, fiecare poziție valorează 1, 2, 4, 8, 16 și 32. Dacă numărul binar are un 1 în slot, adăugați acea valoare; dacă are 0 în slot, nu ai. Șirul binar 100110 se transformă în numărul zecimal 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.

Codificarea Base64 preia acest șir binar și îl descompune în valorile de 6 biți 38, 58, 11 și 41.

În cele din urmă, aceste numere sunt convertite în caractere ASCII utilizând tabelul de codificare Base64. Valorile pe 6 biți ale acestui exemplu se traduc în secvența ASCII m6Lp.

Folosind tabelul de conversie Base64:

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

Acest proces în doi pași este aplicat întregului șir binar care este codificat.

Pentru a vă asigura că datele codificate pot fi tipărite corect și nu depășesc limita de lungime a liniei niciunui server de e-mail, sunt inserate caractere newline pentru a menține lungimea liniei sub 76 de caractere. Caracterele newline sunt codificate ca toate celelalte date.

Întregul scop al codificării Base64, de la adăugarea de umplutură pentru a păstra segmentele binare de 3 octeți până la conversia binarului în text folosind tabelul Base64, înseamnă a păstra integritatea binarului transmis informație.

Tabel de codificare Base64

Următorul tabel traduce toate cele 64 de caractere utilizate în codificarea Base64.

Tabel de codificare Base64
Valoare Char Valoare Char Valoare Char Valoare 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 n 55 3
8 eu 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 /

Rezolvarea finalului jocului

La sfârșitul procesului de codificare, poate apărea o problemă. Dacă dimensiunea datelor originale în octeți este un multiplu de trei, totul funcționează bine. Dacă nu este, pot exista octeți goli. Pentru o codificare corectă, sunt necesari exact 3 octeți de date binare.

Soluția este să adăugați suficienți octeți cu o valoare de 0 pentru a crea un grup de 3 octeți. Două astfel de valori sunt adăugate dacă datele au nevoie de un octet suplimentar de date, unul este adăugat pentru doi octeți suplimentari.

Desigur, aceste „0-uri artificiale” nu pot fi codificate folosind tabelul de codificare de mai jos. Ele trebuie reprezentate printr-un al 65-lea caracter. Caracterul de completare Base64 este semnul Egal (=) și este plasat la sfârșitul datelor codificate.