Base64 este un standard pentru codificarea datelor binare folosind doar 64 de caractere ASCII . Alfabetul de codare conține caractere latine AZ, az, numere 0-9 (62 de caractere în total) și 2 caractere suplimentare în funcție de sistemul de implementare. Fiecare 3 octeți originali sunt codificați cu 4 caractere (incrementare cu ¹⁄₃).
Acest sistem este utilizat pe scară largă în e- mail pentru a reprezenta fișiere binare în corpul e-mailului ( codare transport ).
În formatul de e-mail MIME Base64 , aceasta este o schemă care convertește o secvență arbitrară de octeți într-o secvență de caractere ASCII imprimabile .
Cele 62 de caractere standard sunt completate +cu , /și = ca un cod sufix special.
Specificația completă a acestei forme de Base64 se găsește în RFC 1421 și RFC 2045 . Această schemă este folosită pentru a codifica o secvență de octeți ( octeți ).
Pentru a converti datele în Base64, primul octet este plasat în cei mai semnificativi opt biți ai unui buffer de 24 de biți, următorul în mijlocul opt biți și al treilea în cei mai puțin semnificativi opt biți. Dacă sunt codificați mai puțin de trei octeți, atunci biții tampon corespunzători sunt setați la zero. Apoi fiecare șase biți ai tamponului, începând cu cei mai semnificativi, sunt utilizați ca indici ai șirului „ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/”, iar caracterele sale, indicate de indicii, sunt plasate în șir de ieșire. Dacă sunt codificați doar unul sau doi octeți, rezultatul sunt doar primele două sau trei caractere ale șirului, iar șirul de ieșire este completat cu două sau un caracter =. Acest lucru previne adăugarea de biți suplimentari la datele recuperate. Procesul se repetă pe datele de intrare rămase.
De exemplu, un citat din Leviathan de Thomas Hobbes :
Omul se distinge nu numai prin rațiune, ci și prin această pasiune singulară față de alte animale, care este o poftă a minții, care, printr-o perseverență a încântării în generarea continuă și neobosită a cunoașterii, depășește scurta vehemență a oricărei plăceri carnale. .fiind convertit din ASCII în Base64, arată astfel:
TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0 aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1 c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0 aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdl LCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=În exemplu, cuvântul Man este codificat ca TWFu. Procesul de conversie poate fi reprezentat ca următorul tabel:
Text sursă | M | A | n | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
coduri ASCII | 77 (0x4d) | 97 (0x61) | 110 (0x6e) | |||||||||||||||||||||
Vedere binară | 0 | unu | 0 | 0 | unu | unu | 0 | unu | 0 | unu | unu | 0 | 0 | 0 | 0 | unu | 0 | unu | unu | 0 | unu | unu | unu | 0 |
Index primit în Base64 | 19 | 22 | 5 | 46 | ||||||||||||||||||||
Rezultatul final în Base64 | T | W | F | u |
Simbol | Sens | Simbol | Sens | Simbol | Sens | Simbol | Sens | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
zece | 2 | opt | 16 | zece | 2 | opt | 16 | zece | 2 | opt | 16 | zece | 2 | opt | 16 | |||||||
A | 0 | 000000 | 00 | 00 | Q | 16 | 010000 | douăzeci | zece | g | 32 | 100000 | 40 | douăzeci | w | 48 | 110000 | 60 | treizeci | |||
B | unu | 000001 | 01 | 01 | R | 17 | 010001 | 21 | unsprezece | h | 33 | 100001 | 41 | 21 | X | 49 | 110001 | 61 | 31 | |||
C | 2 | 000010 | 02 | 02 | S | optsprezece | 010010 | 22 | 12 | i | 34 | 100010 | 42 | 22 | y | cincizeci | 110010 | 62 | 32 | |||
D | 3 | 000011 | 03 | 03 | T | 19 | 010011 | 23 | 13 | j | 35 | 100011 | 43 | 23 | z | 51 | 110011 | 63 | 33 | |||
E | patru | 000100 | 04 | 04 | U | douăzeci | 010100 | 24 | paisprezece | k | 36 | 100100 | 44 | 24 | 0 | 52 | 110100 | 64 | 34 | |||
F | 5 | 000101 | 05 | 05 | V | 21 | 010101 | 25 | cincisprezece | l | 37 | 100101 | 45 | 25 | unu | 53 | 110101 | 65 | 35 | |||
G | 6 | 000110 | 06 | 06 | W | 22 | 010110 | 26 | 16 | m | 38 | 100110 | 46 | 26 | 2 | 54 | 110110 | 66 | 36 | |||
H | 7 | 000111 | 07 | 07 | X | 23 | 010111 | 27 | 17 | n | 39 | 100111 | 47 | 27 | 3 | 55 | 110111 | 67 | 37 | |||
eu | opt | 001000 | zece | 08 | Y | 24 | 011000 | treizeci | optsprezece | o | 40 | 101000 | cincizeci | 28 | patru | 56 | 111000 | 70 | 38 | |||
J | 9 | 001001 | unsprezece | 09 | Z | 25 | 011001 | 31 | 19 | p | 41 | 101001 | 51 | 29 | 5 | 57 | 111001 | 71 | 39 | |||
K | zece | 001010 | 12 | 0A | A | 26 | 011010 | 32 | 1A | q | 42 | 101010 | 52 | 2A | 6 | 58 | 111010 | 72 | 3A | |||
L | unsprezece | 001011 | 13 | 0B | b | 27 | 011011 | 33 | 1B | r | 43 | 101011 | 53 | 2B | 7 | 59 | 111011 | 73 | 3B | |||
M | 12 | 001100 | paisprezece | 0C | c | 28 | 011100 | 34 | 1C | s | 44 | 101100 | 54 | 2C | opt | 60 | 111100 | 74 | 3C | |||
N | 13 | 001101 | cincisprezece | 0D | d | 29 | 011101 | 35 | 1D | t | 45 | 101101 | 55 | 2D | 9 | 61 | 111101 | 75 | 3D | |||
O | paisprezece | 001110 | 16 | 0E | e | treizeci | 011110 | 36 | 1E | u | 46 | 101110 | 56 | 2E | + | 62 | 111110 | 76 | 3E | |||
P | cincisprezece | 001111 | 17 | 0F | f | 31 | 011111 | 37 | 1F | v | 47 | 101111 | 57 | 2F | / | 63 | 111111 | 77 | 3F |
UTF-7 este o versiune modificată a Base64. Această schemă de codificare este utilizată pentru fișierele UTF-16 ca format intermediar în MIME. UTF-7 este destinat utilizării cu Unicode în e-mail fără codificare de transport de conținut. Principala diferență dintre această variantă Base64 și MIME este că caracterul =nu este folosit pentru umplutură, deoarece caracterul trebuie să fie evadat de mai multe ori. În schimb, biții octetului sunt umpluți cu zerouri.
Base64 modificat este standardizat conform RFC 2152 ( A Mail-Safe Transformation Format of Unicode ).
În protocolul server-la-server utilizat de IRC și software-ul compatibil, versiunea Base64 este utilizată pentru a codifica adresele IP numerice și binare client/server. Datele numerice ale clientului și serverului au dimensiuni fixe care se potrivesc exact cu numărul de caractere Base64, deci nu este nevoie de umplutură. Adresele IP binare sunt extinse cu zero biți de început pentru a se potrivi. Setul de caractere diferă ușor de MIME prin utilizarea []în loc de +/.
Datorită Base64, conținutul binar poate fi inclus în documentele html, creând un singur document fără imagini separate și alte fișiere suplimentare. Astfel, un document html cu grafică, audio, video, programe, stiluri și alte completări incluse în el devine o alternativă excelentă la alte formate de documente complexe precum doc, docx, pdf.
Unele aplicații codifică date binare pentru includerea ușoară în adrese URL, câmpuri de formular ascunse.
Utilizarea unui codificator URL peste standardul Base64 nu este întotdeauna convenabilă, deoarece convertește caractere /și +în secvențe hexazecimale speciale. Deși această conversie este reversibilă, prelungește șirul și îl face puțin mai dificil de analizat mai târziu. În plus, este posibil ca caracterul %generat de codificatorul URL să trebuiască să fie evadat din nou atunci când trece șirul rezultat prin alte sisteme (de exemplu, în SQL este un element șablon).
Din acest motiv, există un Base64 modificat pentru URL , în care umplutura cu caractere =și simbolurile nu sunt folosite și sunt înlocuite cu +și respectiv . Prin urmare, utilizarea codificatoarelor/decodificatoarelor URL nu mai este necesară și nu are niciun efect asupra lungimii valorii codificate, lăsând intactă aceeași formă codificată pentru utilizarea în baze de date relaționale, formulare web și identificatori de obiect în general. Codarea Base64 a URL -urilor recunoaște varianta atunci când caracterele și sunt înlocuite, respectiv, cu și ( RFC 3548 , secțiunea 4). /*-+/-_
Cealaltă variantă se numește Base64 modificată pentru expresii regulate și utilizări !și -în loc de *și -, pentru a înlocui standardul Base64 +/, deoarece ambele +și *pot fi rezervate pentru expresiile regulate (rețineți că []folosit mai sus în varianta IRCu poate să nu funcționeze în acest context) .
Există și alte opțiuni care folosesc _și -sau .și _dacă șirul Base64 urmează să fie utilizat împreună cu identificatorii pentru programe sau .și -pentru utilizarea în simboluri de nume XML ( Nmtoken ) sau _în :identificatori XML mai limitati ( Nume ). În unele cazuri, adresa URL folosește Base58 , care nu folosește caracterele +și /.
Base58 este folosit pentru a codifica adresele URL în unele sisteme, care diferă de Base64 prin absența caracterelor din textul final care pot fi percepute de o persoană în mod ambiguu. Sunt excluse 0 (zero), O (majusculă latină o ), I (majuscula latină i ), l (majusculă latină L ) . De asemenea, sunt excluse caracterele + (plus) și / (slash), care, atunci când se codifică o adresă URL , pot duce la interpretarea incorectă a adresei.
Radix-64 este o variație a codificării Base64 a datelor binare în format text utilizat în PGP . Diferă de Base64 prin faptul că o sumă de control de 24 de biți este adăugată la sfârșit.
Sistemele de operare bazate pe Unix stochează hash-uri de parole calculate cu crypt în fișierul /etc/passwd folosind codificarea B64 . Este similar cu Radix-64, dar sufixul de aliniere =nu este utilizat și în alfabet, caracterele nealfabetice sunt plasate la început: ./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.
Există multe utilizări pentru Base64. De exemplu, Thunderbird și Mozilla Suite au folosit Base64 pentru a ascunde parolele în POP3 . Base64 poate fi folosit ca metodă de a ascunde secrete fără costul general al gestionării cheilor criptografice , totuși această abordare este complet nesigură și nu este recomandată.
Scanerele de spam care nu decodifică mesajele către Base64 le lipsesc adesea, deoarece astfel de mesaje par suficient de aleatorii pentru a fi confundate cu spam. Acesta este folosit de spammeri pentru a ocoli instrumentele de bază anti-spam.
Acest standard este folosit pentru a codifica imagini JPEG și PNG, pentru a le insera în cărțile electronice FB2 [1] .
Există aplicații care folosesc codificarea Base64 pentru a trimite imagini mici prin SMS lungi [2] .
Serializare formate de date digitale | |
---|---|
Text | |
Internet și telecomunicații |
|
Mass-media | |
Alte |