close

Base64

Vai alla navigazione Vai alla ricerca

Base64  è uno standard per la codifica di dati binari utilizzando solo 64 caratteri ASCII . L'alfabeto di codifica contiene caratteri latini AZ, az, numeri 0-9 (62 caratteri in totale) e 2 caratteri aggiuntivi a seconda del sistema di implementazione. Ogni 3 byte originali vengono codificati con 4 caratteri (incremento di ¹⁄₃).

Questo sistema è ampiamente utilizzato nelle e-mail per rappresentare i file binari nel corpo dell'e-mail ( codifica del trasporto ).

MIME

Nel formato e-mail MIME Base64 , questo è uno schema che converte una sequenza arbitraria di byte in una sequenza di caratteri ASCII stampabili .

I 62 caratteri standard sono riempiti +con /e = come codice suffisso speciale.

La specifica completa di questo modulo di Base64 si trova in RFC 1421 e RFC 2045 . Questo schema viene utilizzato per codificare una sequenza di ottetti ( byte ).

Per convertire i dati in Base64, il primo byte viene posizionato negli otto bit più significativi di un buffer a 24 bit, il successivo negli otto bit centrali e il terzo negli otto bit meno significativi. Se vengono codificati meno di tre byte, i bit del buffer corrispondenti vengono impostati su zero. Quindi ogni sei bit del buffer, a cominciare da quelli più significativi, vengono utilizzati come indici della stringa "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", e i suoi caratteri, indicati dagli indici, vengono inseriti nella stringa di output. Se vengono codificati solo uno o due byte, il risultato sono solo i primi due o tre caratteri della stringa e la stringa di output viene riempita con due o un carattere =. Ciò impedisce l'aggiunta di bit extra ai dati recuperati. Il processo viene ripetuto sui restanti dati di input.

Ad esempio, una citazione dal Leviatano di Thomas Hobbes :

L'uomo si distingue, non solo per la ragione, ma per questa singolare passione dagli altri animali, che è una concupiscenza della mente, che per una perseveranza di diletto nella continua e instancabile generazione di conoscenza, supera la breve veemenza di qualsiasi piacere carnale .

essendo convertito da ASCII a Base64, si presenta così:

TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0
aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1
c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0
aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdl
LCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=

Nell'esempio, la parola Man è codificata come TWFu. Il processo di conversione può essere rappresentato come la seguente tabella:

Testo sorgente M un n
Codici ASCII 77 (0x4d) 97 (0x61) 110 (0x6e)
Vista binaria 0 uno 0 0 uno uno 0 uno 0 uno uno 0 0 0 0 uno 0 uno uno 0 uno uno uno 0
Indice ricevuto in Base64 19 22 5 46
Risultato finale in Base64 T w F tu

Mappatura del valore del carattere Base64

Simbolo Significato Simbolo Significato Simbolo Significato Simbolo Significato
dieci 2 otto 16 dieci 2 otto 16 dieci 2 otto 16 dieci 2 otto 16
UN 0 000000 00 00 Q 16 010000 venti dieci g 32 100000 40 venti w 48 110000 60 trenta
B uno 000001 01 01 R 17 010001 21 undici h 33 100001 41 21 X 49 110001 61 31
C 2 000010 02 02 S diciotto 010010 22 12 io 34 100010 42 22 y cinquanta 110010 62 32
D 3 000011 03 03 T 19 010011 23 13 j 35 100011 43 23 z 51 110011 63 33
e quattro 000100 04 04 u venti 010100 24 quattordici K 36 100100 44 24 0 52 110100 64 34
F 5 000101 05 05 V 21 010101 25 quindici l 37 100101 45 25 uno 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
io otto 001000 dieci 08 Y 24 011000 trenta diciotto o 40 101000 cinquanta 28 quattro 56 111000 70 38
J 9 001001 undici 09 Z 25 011001 31 19 p 41 101001 51 29 5 57 111001 71 39
K dieci 001010 12 0A un 26 011010 32 1A q 42 101010 52 2A 6 58 111010 72 3A
l undici 001011 13 0B b 27 011011 33 1B r 43 101011 53 2B 7 59 111011 73 3B
M 12 001100 quattordici 0C c 28 011100 34 1C S 44 101100 54 2C otto 60 111100 74 3C
N 13 001101 quindici 0D d 29 011101 35 1D t 45 101101 55 2D 9 61 111101 75 3D
o quattordici 001110 16 0E e trenta 011110 36 1E tu 46 101110 56 2E + 62 111110 76 3E
P quindici 001111 17 0F f 31 011111 37 1F v 47 101111 57 2F / 63 111111 77 3F

UTF-7

UTF-7 è una versione modificata di Base64. Questo schema di codifica viene utilizzato per i file UTF-16 come formato intermedio in MIME. UTF-7 è destinato all'uso con unicode nella posta elettronica senza codifica del trasporto del contenuto. La principale differenza tra questa variante Base64 e MIME è che il carattere =non viene utilizzato per il riempimento, poiché è necessario eseguire più volte l'escape del carattere. Invece, i bit dell'ottetto sono riempiti con zeri.

Il Base64 modificato è standardizzato secondo RFC 2152 ( A Mail-Safe Transformation Format of Unicode ).

IRCu

Nel protocollo server-to-server utilizzato da IRC e software compatibile, la versione Base64 viene utilizzata per codificare indirizzi IP numerici e binari client/server. I dati numerici del client e del server hanno dimensioni fisse che corrispondono esattamente al numero di caratteri Base64, quindi non è necessario il riempimento. Gli indirizzi IP binari vengono espansi con zero bit iniziali da abbinare. Il set di caratteri differisce leggermente da MIME utilizzando []invece di +/.

Applicazione nelle applicazioni web

Grazie a Base64, il contenuto binario può essere incluso nei documenti html, creando un unico documento senza immagini separate e altri file aggiuntivi. Pertanto, un documento html con grafica, audio, video, programmi, stili e altre aggiunte in esso inclusi diventa un'ottima alternativa ad altri formati di documenti complessi come doc, docx, pdf.

Alcune applicazioni codificano dati binari per una facile inclusione negli URL, campi modulo nascosti.

L'uso di un codificatore URL sullo standard Base64 non è sempre conveniente, poiché converte i caratteri /e +in sequenze esadecimali speciali. Sebbene questa conversione sia reversibile, allunga la stringa e rende leggermente più difficile l'analisi successiva. Inoltre, %potrebbe essere necessario eseguire nuovamente l'escape del carattere generato dal codificatore URL quando si passa la stringa risultante attraverso altri sistemi (ad esempio, in SQL è un elemento del modello).

Per questo motivo, esiste un Base64 modificato per URL , in cui il riempimento dei caratteri =e i simboli non vengono utilizzati e vengono sostituiti rispettivamente da +e . Pertanto, l'uso di codificatori/decodificatori di URL non è più necessario e non ha alcun effetto sulla lunghezza del valore codificato, lasciando intatta la stessa forma codificata per l'utilizzo in database relazionali, moduli Web e identificatori di oggetti in generale. La codifica Base64 degli URL riconosce la variante quando i caratteri e vengono sostituiti, rispettivamente, con e ( RFC 3548 , sezione 4). /*-+/-_

L'altra variante è chiamata Base64 modificata per espressioni regolari e usi !e -invece di *e -, per sostituire lo standard Base64 +/, perché entrambi +e *possono essere riservati per espressioni regolari (notare che []usato sopra nella variante IRCu potrebbe non funzionare in questo contesto).

Esistono altre opzioni che utilizzano eo e se _la stringa Base64 deve essere utilizzata insieme agli identificatori per i programmi o e per l'uso in token di nome XML ( Nmtoken ) o in identificatori XML più limitati ( Nome ). In alcuni casi, l'URL utilizza Base58 , che non utilizza i caratteri e . -._.-_:+/

Base58

Base58 viene utilizzato per codificare gli URL in alcuni sistemi, che differisce da Base64 per l'assenza di caratteri nel testo finale che possono essere percepiti da una persona in modo ambiguo. Sono esclusi 0 (zero), O (latino maiuscolo o ), I (latino maiuscolo i ), l (latino minuscolo L ) sono esclusi . Sono inoltre esclusi i caratteri + (più) e / (barra), che, durante la codifica di un URL , possono portare a un'interpretazione errata dell'indirizzo.

Radix-64

Radix-64 è una variazione della codifica Base64 di dati binari in formato testo utilizzato in PGP . Differisce da Base64 in quanto viene aggiunto un checksum a 24 bit alla fine.

I sistemi operativi basati su Unix memorizzano gli hash delle password calcolati con crypt nel file /etc/passwd utilizzando la codifica B64 . È simile a Radix-64, ma il suffisso di allineamento =non viene utilizzato e nell'alfabeto i caratteri non alfabetici sono posti all'inizio: ./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.

Altri usi

Ci sono molti usi per Base64. Ad esempio, Thunderbird e Mozilla Suite hanno utilizzato Base64 per nascondere le password in POP3 . Base64 può essere utilizzato come metodo per nascondere i segreti senza il sovraccarico della gestione delle chiavi crittografiche , tuttavia questo approccio è completamente insicuro e non è consigliato.

Gli scanner di spam che non decodificano i messaggi in Base64 spesso li mancano, poiché tali messaggi sembrano abbastanza casuali da essere scambiati per spam. Viene utilizzato dagli spammer per aggirare gli strumenti anti-spam di base.

Questo standard viene utilizzato per codificare immagini JPEG e PNG, per inserirle negli e-book FB2 [1] .

Esistono applicazioni che utilizzano la codifica Base64 per inviare piccole immagini tramite lunghi [en] SMS [2] .

Note

  1. L'elemento binario è FictionBook . fictionbook.org. Estratto il 23 settembre 2019 . Archiviato dall'originale il 22 settembre 2019.
  2. SMS immagine | F-Droid - Repository di app Android gratuito e open source . f-droid.org . Estratto il 23 aprile 2021 . Archiviato dall'originale il 23 aprile 2021.

Collegamenti

Codifica e decodifica in linea