2012-04-25 3 views
49

Perché abbiamo la codifica Base64? Sono un principiante e davvero non capisco perché vorresti offuscare i byte in qualcos'altro (a meno che non sia crittografia). In uno dei libri che ho letto la codifica Base64 è utile quando la trasmissione binaria non è possibile. Per esempio. Quando pubblichiamo un modulo è codificato. Ma perché convertiamo i byte in lettere? Non potremmo convertire solo byte in formato stringa con uno spazio intermedio? Ad esempio, 00000001 00000004? O semplicemente 0000000100000004 senza spazio perché i byte vengono sempre in coppia di 8?Qual è il vero scopo della codifica Base64?

+8

Perché hai appena trasformato 1 byte in 8 anziché 3 in 4 come fai con base64 (se la memoria mi serve correttamente). La larghezza di banda è finita. –

+0

Stai confondendo bit (con 8 bit che fai un byte) e byte, che possono arrivare in qualsiasi tipo di raggruppamento. –

risposta

60

Base64 è un modo per codificare i dati binari in un set di caratteri ASCII noto a quasi tutti i sistemi di computer, al fine di trasmettere i dati senza perdita o modifica dei contenuti stessi. Ad esempio, i sistemi di posta non possono gestire dati binari perché si aspettano dati ASCII (testuali). Quindi, se si desidera trasferire un'immagine o un altro file, questo verrà danneggiato a causa del modo in cui gestisce i dati.

Nota: la codifica base64 NON è un modo di crittografare, né un modo di compattare i dati. In effetti, una porzione di dati codificati in base 64 è 1.333 ... volte più grande del datapiece originale. È solo un modo per essere sicuri che nessun dato venga perso o modificato durante il trasferimento.

+3

I dati codificati Base64 sono esattamente 1.333 (3) volte più grandi dei dati originali + ulteriori 0-3 caratteri extra a seconda della lunghezza dei dati di input modulo 4. È perché ogni carattere codificato Base64 memorizza 6 bit di informazioni (64 caratteri diversi). – too

+1

sia prima che dopo i dati sono ancora binari. allora perché i dati subiscono una perdita –

3

Base64 è un modo più o meno compatto di trasmettere (codificare, infatti, ma con l'obiettivo di trasmettere) qualsiasi tipo di dati binari.

Vedi http://en.wikipedia.org/wiki/Base64

"La regola generale è quello di scegliere una serie di 64 caratteri che è sia parte di un sottoinsieme comune alla maggior parte codifiche, e anche stampabili."

Questo è uno scopo molto generale e il bisogno comune non è quello di sprecare più spazio del necessario.

Storicamente, si basa sul fatto che esiste un sottoinsieme comune di (quasi) tutte le codifiche utilizzate per memorizzare i caratteri in byte e che molti dei possibili byte 2^8 rischiano perdite o trasformazioni durante il trasferimento di dati semplice (per esempio una sequenza copy-paste-emailsend-emailreceive-copia-incolla).

(si prega di reindirizzare in suvote al commento di Brian, l'ho appena reso più completo e, si spera, più chiaro).

+0

Nah, è solo presto e non ho voglia di dare una risposta completa. Questo è buono. –

+0

Vedi, posso tornare indietro usando Base64 per copiare/incollare dati binari come testo senza dovermi preoccupare di caratteri non stampabili (come un URL dati per contenere, ad esempio, dati immagine, in una stringa). Quello che non capisco è quando le persone lo usano per codificare il testo normale. Come il modo * Hyper Light Drifter * memorizza i suoi dati di salvataggio in una stringa JSON e quindi lo codifica in Base64.È un passaggio extra non necessario nel salvataggio/caricamento che non fa nulla di utile, e richiede più tempo e spazio. Se non potevano essere fottuti per scrivere il proprio sistema di salvataggio, quanto altro nel gioco è stato sorvolato? –

3

Base64 è un meccanismo per abilitare la rappresentazione e il trasferimento di dati binari su supporti che consentono solo caratteri stampabili. È la forma più popolare della "codifica di base", mentre gli altri noti in uso sono Base16 e Base32.

La necessità di Base64 è nata dalla necessità di allegare contenuti binari a e-mail come immagini, video o contenuto binario arbitrario. Dal momento che SMTP [RFC 5321] consentito solo caratteri US-ASCII 7-bit all'interno dei messaggi, vi era la necessità di rappresentare questi flussi ottetto binari utilizzando i caratteri ASCII a sette bit ...

Spero che questo risponde alla domanda