Domanda

Ho sentito gente parlare di " base 64 di codifica " qui e li. A cosa serve?

È stato utile?

Soluzione

Quando si dispone di alcuni dati binari che si desidera spedire attraverso una rete, in genere non lo si fa semplicemente trasmettendo i bit e i byte sul filo in un formato non elaborato. Perché? perché alcuni media sono creati per lo streaming di testo. Non si sa mai: alcuni protocolli possono interpretare i tuoi dati binari come caratteri di controllo (come un modem), oppure i tuoi dati binari potrebbero essere rovinati perché il protocollo sottostante potrebbe pensare di aver inserito una combinazione di caratteri speciale (come il modo in cui FTP traduce la riga terminazioni).

Quindi, per ovviare a questo, le persone codificano i dati binari in caratteri. Base64 è uno di questi tipi di codifiche.

Perché 64?
Perché in genere puoi fare affidamento sullo stesso 64 caratteri presenti in molti set di caratteri e puoi essere ragionevolmente sicuro che i tuoi dati finiranno dall'altra parte del filo non corrotti.

Altri suggerimenti

È fondamentalmente un modo per codificare dati binari arbitrari nel testo ASCII. Richiede 4 caratteri per 3 byte di dati, più potenzialmente un po 'di riempimento alla fine.

In sostanza ogni 6 bit dell'input è codificato in un alfabeto di 64 caratteri. Lo "standard" l'alfabeto utilizza A-Z, a-z, 0-9 e + e /, con = come carattere di riempimento. Esistono varianti sicure per gli URL.

Wikipedia è una fonte ragionevolmente buona di ulteriori informazioni.

La codifica Base-64 è un modo per prendere dati binari e trasformarli in testo in modo che sia più facilmente trasmesso in cose come e-mail e dati di moduli HTML.

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

È una codifica testuale di dati binari in cui il testo risultante non ha nient'altro che lettere, numeri e simboli " + " ;, " / " e " = " ;. È un modo conveniente per archiviare / trasmettere dati binari su supporti specificamente utilizzati per dati testuali.

Ma perché Base-64? Le due alternative per convertire i dati binari in testo che vengono immediatamente in mente sono:

  1. Decimale: memorizza il valore decimale di ogni byte come tre numeri: 045 112 101 037 ecc. dove ogni byte è rappresentato da 3 byte. I dati si gonfiano di tre volte.
  2. Esadecimale: memorizza i byte come coppie esadecimali: AC 47 0D 1A ecc. dove ogni byte è rappresentato da 2 byte. I dati si gonfiano due volte.

Base-64 mappa 3 byte (8 x 3 = 24 bit) in 4 caratteri che si estendono su 6 bit (6 x 4 = 24 bit). Il risultato è simile a " TWFuIGlzIGRpc3Rpb ... " ;. Pertanto il gonfiore è solo un 4/3 = 1.3333333 volte l'originale.

A parte quanto già detto, due usi molto comuni che non sono stati elencati sono

Gli hash:

Gli hash sono funzioni unidirezionali che trasformano un blocco di byte in un altro blocco di byte di dimensioni fisse come 128 bit o 256 bit (SHA / MD5). La conversione dei byte risultanti in Base64 semplifica notevolmente la visualizzazione dell'hash soprattutto quando si confronta un checksum per l'integrità. Gli hash sono visti così spesso in Base64 che molte persone scambiano Base64 stesso come un hash.

Crittografia:

Poiché una chiave di crittografia non deve essere di testo ma di byte non elaborati, a volte è necessario memorizzarla in un file o database, per cui Base64 è utile. Lo stesso vale per i byte crittografati risultanti.

Si noti che sebbene Base64 sia spesso usato nella crittografia non è un meccanismo di sicurezza. Chiunque può riconvertire la stringa Base64 nei suoi byte originali, quindi non dovrebbe essere usata come mezzo per proteggere i dati, ma solo come formato per visualizzare o archiviare i byte grezzi più facilmente.

Certificati

I certificati x509 in formato PEM sono codificati in base 64. http://how2ssl.com/articles/working_with_pem_files/

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

  

Il termine Base64 si riferisce a una specifica codifica di trasferimento del contenuto MIME.   Viene anche usato come termine generico per qualsiasi schema di codifica simile   codifica i dati binari trattandoli numericamente e traducendoli in   una rappresentazione di base 64. La particolare scelta della base è dovuta al   storia della codifica del set di caratteri: si può scegliere un set di 64   caratteri che fanno entrambi parte del sottoinsieme comune alla maggior parte delle codifiche,   e anche stampabile. Questa combinazione lascia improbabili i dati   modificato in transito attraverso i sistemi, come la posta elettronica, che erano   tradizionalmente non pulito a 8 bit.

     

Base64 può essere utilizzato in diversi contesti:

     
      
  • Evolution e Thunderbird usano Base64 per offuscare le password e-mail [1]
  •   
  • Base64 può essere utilizzato per trasmettere e archiviare testo che potrebbe altrimenti causare collisioni del delimitatore
  •   
  • Base64 è spesso usato come scorciatoia veloce ma insicuro per oscurare segreti senza incorrere nel sovraccarico della gestione delle chiavi crittografiche

  •   
  • Gli spammer usano Base64 per eludere gli strumenti di base antispam, che spesso non decodificano Base64 e quindi non sono in grado di rilevare le parole chiave in codificato   messaggi.

  •   
  • Base64 viene utilizzato per codificare stringhe di caratteri nei file LDIF
  •   
  • Base64 viene talvolta utilizzato per incorporare dati binari in un file XML, usando una sintassi simile a ...... ad es.   Bookmarks.html di Firefox.
  •   
  • Base64 viene utilizzato anche quando si comunica con i dispositivi di stampa Fiscal Signature governativi (di solito, su porte seriali o parallele) a   minimizzare il ritardo nel trasferimento dei caratteri di ricevuta per la firma.
  •   
  • Base64 è usato per codificare file binari come immagini all'interno di script, per evitare di dipendere da file esterni.
  •   
  • Può essere utilizzato per incorporare dati di immagini non elaborati in una proprietà CSS come immagine di sfondo.
  •   

All'inizio dei computer, quando la comunicazione tra sistemi di linea telefonica non era particolarmente affidabile, un rapido & amp; è stato utilizzato un metodo sporco per verificare l'integrità dei dati: "parità di bit". In questo metodo, ogni byte trasmesso avrebbe 7 bit di dati e l'ottavo sarebbe 1 o 0, per forzare il numero totale di 1 bit nel byte per essere pari.

Quindi 0x01 verrebbe trasmesso come 0x81; 0x02 sarebbe 0x82; 0x03 rimarrebbe 0x03 ecc.

Per migliorare questo sistema, quando è stato definito il set di caratteri ASCII, sono stati assegnati solo caratteri 00-7F. (Ancora oggi, tutti i personaggi impostati nell'intervallo 80-FF non sono standard)

Molti router del giorno inseriscono il controllo di parità e la traduzione dei byte in hardware, costringendo i computer ad essi collegati a gestire rigorosamente i dati a 7 bit. Questo forza gli allegati di posta elettronica (e tutti gli altri dati, motivo per cui i protocolli HTTP e SMTP sono basati su testo), per essere convertiti in un formato di solo testo.

Pochi router sono sopravvissuti negli anni '90. Dubito fortemente che qualcuno di loro sia in uso oggi.

Alcuni protocolli di trasporto consentono solo la trasmissione di caratteri alfanumerici. Immagina una situazione in cui i personaggi di controllo vengono utilizzati per attivare azioni speciali e / o che supporta solo una larghezza di bit limitata per personaggio. Base64 trasforma qualsiasi input in una codifica che utilizza solo caratteri alfanumerici, + , / e = come carattere di riempimento.

L'uso di Base64 che descriverò qui è un po 'un trucco. Quindi se non ti piacciono gli hack, per favore non andare avanti.

Ho avuto problemi quando ho scoperto che utf8 di MySQL non supporta i caratteri unicode a 4 byte poiché utilizza una versione a 3 byte di utf8. Quindi cosa ho fatto per supportare l'unicode a 4 byte completo su utf8 di MySQL? Bene, base64 codifica le stringhe durante l'archiviazione nel database e decodifica base64 durante il recupero.

Poiché la codifica e la decodifica base64 sono molto veloci, quanto sopra ha funzionato perfettamente.

Devi prendere in considerazione i seguenti punti:

  • La codifica Base64 utilizza il 33% di spazio in più

  • Le stringhe memorizzate nel database non saranno leggibili dall'uomo (potresti venderle come una caratteristica che le stringhe del database usano una forma base di crittografia).

È possibile utilizzare il metodo sopra descritto per qualsiasi motore di archiviazione che non supporta Unicode.

È usato per convertire dati binari arbitrari in testo ASCII.

Ad esempio, gli allegati di posta elettronica vengono inviati in questo modo.

Lo uso in senso pratico quando trasferiamo oggetti binari di grandi dimensioni (immagini) tramite servizi web. Quindi, quando collaudo un servizio web C # usando uno script Python, l'oggetto binario può essere ricreato con un po 'di magia.

[In python]

import base64
imageAsBytes = base64.b64decode( dataFromWS )

& # 8220; Gli schemi di codifica Base64 sono comunemente utilizzati quando è necessario codificare i dati binari che devono essere archiviati e trasferiti su supporti progettati per gestire dati testuali. Questo per garantire che i dati rimangano intatti senza modifiche durante il trasporto & # 8221; (Wiki, 2017)

L'esempio potrebbe essere il seguente: si dispone di un servizio Web che accetta solo caratteri ASCII. Desideri salvare e quindi trasferire i dati dell'utente in un'altra posizione (API) ma il destinatario desidera ricevere dati non toccati. Base64 è per questo. . . L'unico aspetto negativo è che la codifica base64 richiederà circa il 33% di spazio in più rispetto alle stringhe normali.

Un altro esempio :: uenc = url encoded = aHR0cDovL2xvYy5tYWdlbnRvLmNvbS9hc2ljcy1tZW4tcy1nZWwta2F5YW5vLXhpaS5odG1s==--s==-shi=it-s=================== :. //loc.querytip.com/asics-men-s-gel-kayano-xii.html

Come puoi vedere non possiamo mettere char & # 8220; / & # 8221; nell'URL se vogliamo inviare l'ultimo URL visitato come parametro perché infrangeremmo la regola attributo / valore per & # 8220; MOD riscrittura & # 8221; & # 8211; OTTIENI parametro.

Un esempio completo potrebbe essere: & # 8220; http://loc.querytip.com/checkout/cart/add/uenc/http://loc.magento.com/asics -men-s-gel-Kayano-xii.html / prodotto / 93 / & # 8221;

Principalmente, l'ho visto usato per codificare dati binari in contesti che possono gestire solo set di caratteri ASCII o semplici.

Per espandere un po 'quello che dice Brad: molti meccanismi di trasporto per e-mail e Usenet e altri modi di spostare i dati non sono "puliti a 8 bit", il che significa che i caratteri al di fuori del set di caratteri ASCII standard potrebbero essere alterati durante il trasporto - ad esempio, 0x0D potrebbe essere visto come un ritorno a capo e trasformato in ritorno a capo e avanzamento riga. Base 64 mappa tutti i caratteri binari in diverse lettere e numeri ascii standard e punteggiatura in modo che non vengano alterati in questo modo.

Anni fa, quando fu introdotta la funzionalità di mailing, in modo che fosse completamente basata sul testo, con il passare del tempo, divennero necessari allegati come immagini e media (audio, video, ecc.). Quando questi allegati vengono inviati su Internet (che è fondamentalmente sotto forma di dati binari), la probabilità che i dati binari vengano corrotti è elevata nella sua forma grezza. Quindi, per affrontare questo problema è arrivato BASE64.

Il problema con i dati binari è che contiene caratteri null che in alcune lingue come C, C ++ rappresentano la fine della stringa di caratteri, quindi l'invio di dati binari in formato non elaborato contenente byte NULL interromperà la lettura completa di un file e causerà un danneggiamento i dati.

Ad esempio:

In C e C ++, questo "null" il carattere mostra la fine di una stringa. Quindi "CIAO" è memorizzato in questo modo:

H E L L O

72 69 76 76 79 00

Lo 00 dice "fermati qui".

Ora tuffiamoci nel funzionamento della codifica BASE64.

Punto da notare: la lunghezza della stringa deve essere in multipli di 3.

Esempio 1:

Stringa da codificare: & # 8220; ace & # 8221 ;, Lunghezza = 3

1) Converti ogni carattere in decimale.

a = 97, c = 99, e = 101

 inserisci qui la descrizione dell'immagine

2) Cambia ogni decimale in rappresentazione binaria a 8 bit.

97 = 01100001, 99 = 01100011, 101 = 01100101

Combinato: 01100001 01100011 01100101

3) Separato in un gruppo di 6 bit.

011000 010110 001101 100101

4) Calcola il binario in decimale

011000 = 24, 010110 = 22, 001101 = 13, 100101 = 37

5) Converti i caratteri decimali in base64 usando il grafico base64.

24 = Y, 22 = W, 13 = N, 37 = l

& # 8220; ace & # 8221; = & Gt; & # 8220; YWNl & # 8221;

 inserisci qui la descrizione dell'immagine

Esempio 2:

Stringa da codificare: & # 8220; abcd & # 8221; Lunghezza = 4, non è multiplo di 3. Quindi, per rendere la lunghezza della stringa multipla di 3, è necessario aggiungere un'imbottitura di 2 bit per rendere lunghezza = 6. Il bit di imbottitura è rappresentato da & # 8220; = & # 8221; firmare.

Punto da notare: un bit di padding equivale a due zero 00, quindi due bit di padding equivalgono a quattro zero 0000.

Quindi iniziamo il processo: & # 8211;

1) Converti ogni carattere in decimale.

a = 97, b = 98, c = 99, d = 100

2) Cambia ogni decimale in rappresentazione binaria a 8 bit.

97 = 01100001, 98 = 01100010, 99 = 01100011, 100 = 01100100

3) Separato in un gruppo di 6 bit.

011000, 010110, 001001, 100011, 011001, 00

quindi l'ultimo 6 bit non è completo, quindi inseriamo due bit di padding che equivalgono a quattro zero & # 8220; 0000 & # 8221 ;.

011000, 010110, 001001, 100011, 011001, 000000 ==

Ora è uguale. Due segni di uguale alla fine mostrano che sono stati aggiunti 4 zero (aiuta nella decodifica).

4) Calcola il binario in decimale.

011000 = 24, 010110 = 22, 001001 = 9, 100011 = 35, 011001 = 25, 000000 = 0 ==

5) Converti i caratteri decimali in base64 usando il grafico base64.

24 = Y, 22 = W, 9 = j, 35 = j, 25 = Z, 0 = A ==

& # 8220; ABCD & # 8221; = & Gt; & # 8220; YWJjZA == & # 8221;

Base64

Base64 è un termine generico per un numero di schemi di codifica simili che codificano i dati binari trattandoli numericamente e traducendoli in una rappresentazione 64 di base. Il termine Base64 proviene da una specifica codifica di trasferimento del contenuto MIME.

Gli schemi di codifica Base64 sono comunemente usati quando è necessario codificare dati binari che devono essere archiviati e trasferiti su supporti progettati per gestire dati testuali. Questo per garantire che i dati rimangano intatti senza modifiche durante il trasporto. Base64 viene utilizzato comunemente in numerose applicazioni, tra cui la posta elettronica tramite MIME e la memorizzazione di dati complessi in XML.

Base64 può essere utilizzato per vari scopi.

Il motivo principale è convertire i dati binari in qualcosa di passabile.

A volte lo uso per passare i dati JSON da un sito all'altro, archiviare informazioni nei cookie di un utente.

Nota: Puoi " puoi " usalo per la crittografia - Non vedo perché la gente dice che non puoi, e che non è crittografia, anche se sarebbe facilmente fragile e non è ben visto. Crittografia non significa altro che convertire una stringa di dati in un'altra stringa di dati che può essere decifrata in un secondo momento oppure no, ed è ciò che fa base64.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top