Qual è lo scopo della codifica base 64 e perché viene utilizzato nell'autenticazione di base HTTP?


129

Non ottengo la crittografia Base64.

Se uno può decrittografare una stringa Base64, qual è il suo scopo?

Perché viene utilizzato per l'autenticazione HTTP di base?

È come dire a qualcuno che la mia password è invertita in OLLEH.

Le persone che vedono OLLEH sapranno che la password originale era CIAO.




10
base64 non è una crittografia, è una codifica
n611x007

Risposte:


248

Base64 non è la crittografia, è una codifica. È un modo di rappresentare i dati binari usando solo caratteri stampabili (di testo).

Vedi questo paragrafo dalla pagina di Wikipedia per l'autenticazione di base HTTP :

Mentre la codifica del nome utente e della password con l'algoritmo Base64 li rende generalmente illeggibili a occhio nudo, sono facilmente decodificabili quanto codificati. La sicurezza non è l'intento del passaggio di codifica. Piuttosto, l'intento della codifica è di codificare caratteri non compatibili con HTTP che potrebbero essere nel nome utente o password in quelli compatibili con HTTP.


4
Inoltre, sembra che la relativa codifica dei caratteri per ottenere i "dati binari" dalla stringa dovrebbe essere iso-8859-1 . ( fonte )
Myobis,

60

Normalmente si chiama codifica base64, non crittografia! La cosa bella della codifica base64 è che ti consente di rappresentare i dati (binari) usando solo un sottoinsieme comune dei caratteri disponibili, molto più efficacemente della semplice scrittura di una stringa di 1 e 0 come ASCII per esempio.


6
+1, ma il confronto con la memorizzazione dei dati in 1s, il flusso 0s è troppo esagerato. È meglio confrontarlo con l'archiviazione dei dati in formato esadecimale. Perché hex farebbe solo x2più byte del flusso originale e 1s, 0s - renderà x8volte più byte. (E Base64 rende x1.3più dati dell'array di byte originale). Quindi a volte è accettabile codificare il flusso binario come stringa esadecimale, raddoppiando la quantità di byte, ad esempio solo per memorizzare l'hash della password nel database.
Agnius Vasiliauskas,

30

En cripta ioni richiede una chiave (stringa o algoritmo) al fine di decifrare; da qui la "cripta" (radice: crittografia )

En cod ing Modifica i / turni / cambia un codice di carattere in un altro. In questo caso, i normali byte di dati ora possono essere facilmente rappresentati e trasportati tramite HTTP.


5
Crittografia significa semplicemente "rendere nascosto": la crittografia basata su chiave è un'invenzione molto recente. La codifica è una forma di codifica che è stata utilizzata come crittografia (anche se non da chiunque abbia più di 12 anni per centinaia di anni).

2
La crittografia in volgare viene utilizzata per fare riferimento alle recenti modalità di crittografia, in particolare la crittografia del computer, che è basata su chiave (chiave pubblica / privata). Sebbene sia vero, non è necessario indicare una definizione letterale di una parola datata; altrimenti, discuteresti della definizione storica di molte parole inglesi usate oggi. I volgari (e talvolta colloquiali) sono ciò che dà parole contesto e quindi definizione.
vol7ron,

1
Non penso che tu abbia suonato maleducato; Sono d'accordo con il tuo punto sul contesto moderno. Le parole e le definizioni sono in continua evoluzione. Penso che "codificare" e "crittografare" abbiano sicuramente due definizioni ben distinte nell'informatica moderna e la tua risposta fa un buon sforzo per riassumere le differenze.
Dan Bechard,

La codifica Base64 è una forma di offuscamento, che significa semplicemente rendere poco chiaro. Per molte applicazioni, si tratta di una crittografia sufficiente in cui l'obiettivo è semplicemente quello di manipolare qualsiasi testo chiaro inviato tramite un filo, ad esempio.
Dominic Cerisano,

6
@DominicCerisano: No, la codifica base64 non conta come crittografia e spero che non la usi per proteggere nulla.
Ry-

19

Nel linguaggio quotidiano, un "codice" è qualcosa di segreto. In scienza e ingegneria, un codice è semplicemente un accordo, un insieme di regole, su come scrivere qualcosa.

Quel codice potrebbe essere segreto. In tal caso, si chiama crittografia. Ma in generale, un codice non è segreto. Prendi il codice genetico. Esso afferma semplicemente che il nostro DNA è costruito da quattro basi diverse -  A, C, GeT e che tre basi presi insieme formano un aminoacido. C'è anche una tabella di cui formano tre lettere quale aminoacido.

Non c'è nulla di segreto in questo codice.

Allo stesso modo, Base64 non è un codice segreto. Piuttosto, è un codice che consente di memorizzare i dati in sei bit per carattere (quindi ci sono 64 entità diverse, ovvero la "base" del sistema è 64, così come la base del nostro sistema decimale è 10, poiché ci sono 10 entità diverse chiamato "cifre").



17

La codifica Base-64 fa parte delle specifiche MIME. Fornisce un trasporto sicuro codifica per il per i dati che non verranno masticati se / quando viene inoltrato attraverso un host che utilizza uno schema di codifica diverso da quello utilizzato dal client originale.

Ci sono molti host diversi sugli intertubes e non puoi davvero supporre supporto per qualcosa di diverso da ASCII a 7 bit, senza rischiare la perdita / confusione dei dati.

I mainframe IBM, ad esempio, utilizzano una codifica denominata EBCDIC (disponibile in molte varianti). I suoi punti di codice sono completamente diversi dai punti di codice utilizzati dai puter basati su ASCII - in ASCII, le lettere AZ sono 0x41 - 0x5A; in EBCDIC le lettere A - Z non sono nemmeno un intervallo contiguo: le lettere AI vivono a 0xC1 - 0xC9, le lettere JR vivono a 0xD1 - 0xD9 e le lettere SZ vivono a 0xE2 - 0xE9.


0

Per impostazione predefinita, i parametri del campo di intestazione del messaggio nei messaggi HTTP (Hypertext Transfer Protocol) non possono contenere caratteri al di fuori del set di caratteri ISO-8859-1.

Se il nome utente e la password contengono un set di caratteri incompatibile rispetto a HTTP non sarebbe in grado di trasportare quel testo. per evitare ciò, codifichiamo il nome utente e la password con base64 per assicurarci di inviare caratteri compatibili HTTP su HTTP. per ulteriori informazioni, consultare questo Basic_access_authentication

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.