Base64
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 SMS [2] .
Note
- ↑ L'elemento binario è FictionBook . fictionbook.org. Estratto il 23 settembre 2019 . Archiviato dall'originale il 22 settembre 2019.
- ↑ 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
- RFC 1421 (Miglioramento della privacy per la posta elettronica in Internet)
- RFC 2045 (MIME)
- RFC 4648 (codifica dei dati Base16, Base32 e Base64)
- Codice sorgente Base64 in C
- Codice sorgente Base64 in Java
Codifica e decodifica in linea
- Solo Base64
- Base64 come uno dei tanti formati