Codificarea 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 codare Base64 este utilizată atunci când datele binare, cum ar fi imaginile sau videoclipurile, sunt transmise prin sisteme care sunt proiectate să transmită date într-un format text simplu (ASCII).
De ce este folosită codificarea Base64?
Nevoia de codificare Base64 vine din problemele care apar atunci când media este transmisă în format binar brut către sisteme bazate pe text.
Deoarece sistemele bazate pe text (cum ar fi e-mailul) interpretează datele binare ca o gamă largă de caractere, inclusiv caractere de comandă speciale, multe dintre datele binare care sunt transmise către mediile de transfer sunt interpretate greșit de acele sisteme și sunt pierdute sau corupte în procesul de transmitere.
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 folosite 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 codificare 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ă descompuneț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 majuscule, precum și semnul plus (+) și bara oblică (/). Există, de asemenea, un al 65-lea caracter cunoscut sub numele de pad, care este semnul Egal (=). Acest caracter este folosit atunci când ultimul segment de date binare nu conține 6 biți complet.
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. și altele.
Un codificator 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: 02^01 + 12^1 + 12^2 + 02^3 + 02^4 + 12^5=0+2 +4+0+0+32.
Codificarea Base64 preia acest șir binar și îl descompune în valorile pe 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.
Utilizarea tabelului de conversie Base64:
- 38 este m
- 58 este 6
- 11 este L
- 41 este p
Acest proces în doi pași se aplică î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 liniilor niciunui server de e-mail, sunt inserate caractere de linie nouă pentru a menține lungimea liniei sub 76 de caractere. Caracterele de linie nouă sunt codificate ca toate celel alte date.
Întregul scop al codificării Base64, de la adăugarea de umplutură pentru a păstra segmente binare de 3 octeți până la conversia binarului în text folosind tabelul Base64, este de a păstra integritatea informațiilor binare transmise.
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 | 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 | / |
Rezolvarea finalului jocului
La sfârșitul procesului de codificare, este posibil să existe 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.
Bineînțeles, 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.