Was ist der Zweck der Base 64-Codierung und warum wird sie bei der HTTP-Basisauthentifizierung verwendet?

129

Ich bekomme keine Base64-Verschlüsselung.

Wenn man eine Base64-Zeichenfolge entschlüsseln kann, wozu dient sie dann?

Warum wird es für die HTTP Basic-Authentifizierung verwendet?

Es ist, als würde man jemandem sagen, dass mein Passwort in OLLEH umgekehrt ist.

Leute, die OLLEH sehen, werden wissen, dass das ursprüngliche Passwort HALLO war.

Ajsie
quelle
10
base64 ist keine Verschlüsselung, sondern eine Codierung
n611x007

Antworten:

248

Base64 ist keine Verschlüsselung - es ist eine Codierung. Auf diese Weise können Binärdaten nur mit druckbaren (Text-) Zeichen dargestellt werden.

Siehe diesen Abschnitt aus der Wikipedia - Seite für HTTP Basic Authentication :

Während das Codieren des Benutzernamens und des Kennworts mit dem Base64-Algorithmus sie normalerweise mit bloßem Auge unlesbar macht, lassen sie sich ebenso leicht decodieren wie codieren. Sicherheit ist nicht die Absicht des Codierungsschritts. Die Absicht der Codierung besteht vielmehr darin, nicht HTTP-kompatible Zeichen, die im Benutzernamen oder Kennwort enthalten sein können, in Zeichen zu codieren, die HTTP-kompatibel sind.

Matt Bridges
quelle
4
Es scheint auch, dass die relevante Zeichenkodierung, um die 'Binärdaten' aus der Zeichenfolge zu erhalten, iso-8859-1 sein sollte . ( Quelle )
Myobis
60

Es wird normalerweise Base64-Codierung genannt, nicht Verschlüsselung! Das Schöne an der Base64-Codierung ist, dass Sie (binäre) Daten nur mit einer begrenzten gemeinsamen Teilmenge der verfügbaren Zeichen darstellen können, was weitaus effizienter ist, als beispielsweise nur eine Zeichenfolge mit Einsen und Nullen als ASCII zu schreiben.

Flexo
quelle
6
+1, aber der Vergleich zum Speichern von Daten in 1s, 0s Stream ist zu übertrieben. Es ist besser, es mit dem Speichern von Daten im Hex-Format zu vergleichen. Weil hex nur x2mehr Bytes als der ursprüngliche Stream machen würde und 1s, 0s - macht x8mal mehr Bytes. (Und Base64 erstellt x1.3mehr Daten als das ursprüngliche Byte-Array). Daher ist es manchmal akzeptabel, den Binärstrom als Hex-Zeichenfolge zu codieren und die Bytemenge zu verdoppeln - zum Beispiel nur, um den Kennwort-Hash in der Datenbank zu speichern.
Agnius Vasiliauskas
30

En Krypta - Ionen erfordert einen Schlüssel (string oder Algorithmus) , um zu entschlüsseln; daher die "Krypta" (Wurzel: Kryptographie )

En cod ing ändert / Verschiebungen / ändert einen Zeichencode in ein anderes. In diesem Fall können jetzt übliche Datenbytes einfach über HTTP dargestellt und transportiert werden.

vol7ron
quelle
5
Verschlüsselung bedeutet nur "versteckt machen" - schlüsselbasierte Kryptographie ist eine sehr junge Erfindung. Verschlüsselung ist eine Form der Verschlüsselung, die als Verschlüsselung verwendet wird (obwohl sie seit Hunderten von Jahren von niemandem über 12 Jahren alt ist).
2
Die Verschlüsselung im Volksmund bezieht sich auf neuere Verschlüsselungsmodi, insbesondere auf die verschlüsselbasierte Computerverschlüsselung (öffentlicher / privater Schlüssel). Es ist zwar wahr, aber es ist nicht notwendig, auf eine wörtliche Definition eines datierten Wortes hinzuweisen. Andernfalls würden Sie die historische Definition vieler heute verwendeter englischer Wörter argumentieren. Die Umgangssprache (und manchmal auch Umgangssprache) gibt den Wörtern Kontext und damit Definition.
Vol7ron
1
Ich glaube nicht, dass du unhöflich geklungen hast. Ich stimme Ihrem Standpunkt zum modernen Kontext zu. Wörter und Definitionen entwickeln sich ständig weiter. Ich denke, "codieren" und "verschlüsseln" haben im modernen Computing definitiv zwei sehr unterschiedliche Definitionen, und Ihre Antwort bemüht sich sehr, die Unterschiede zusammenzufassen.
Dan Bechard
Die Base64-Codierung ist eine Form der Verschleierung, die einfach bedeutet, sie unklar zu machen. Für viele Anwendungen ist dies eine ausreichende Verschlüsselung, bei der das Ziel einfach darin besteht, beispielsweise über einen Draht gesendeten Klartext zu entstellen.
Dominic Cerisano
6
@DominicCerisano: Nein, die Base64-Codierung zählt nicht als Verschlüsselung, und ich hoffe, Sie verwenden sie nicht, um etwas zu schützen.
Ry-
19

In der Alltagssprache ist ein „Code“ etwas Geheimnisvolles. In Wissenschaft und Technik ist ein Code einfach eine Vereinbarung, ein Regelwerk, wie man etwas schreibt.

Dieser Code kann geheim sein. In diesem Fall spricht man von einer Verschlüsselung. Im Allgemeinen ist ein Code jedoch nicht geheim. Nimm den genetischen Code. Darin heißt es lediglich , dass unsere DNA aus vier verschiedenen Basen aufgebaut ist -  A, C, Gund , Tund dass drei Basen zusammen eine Aminosäure genommen bilden. Es gibt auch eine Tabelle, von der drei Buchstaben welche Aminosäure bilden.

An diesem Code ist nichts Geheimnisvolles.

Ebenso ist Base64 kein Geheimcode. Es handelt sich vielmehr um einen Code, mit dem Daten in sechs Bits pro Zeichen gespeichert werden können (es gibt also 64 verschiedene Entitäten, dh die „Basis“ des Systems ist 64, genau wie die Basis unseres Dezimalsystems 10 ist, da es 10 verschiedene Entitäten gibt genannt "Ziffern").

Konrad Rudolph
quelle
17

Die Base-64-Codierung ist Teil der MIME-Spezifikationen. Es bietet eine transportsichere Codierung für Daten, die nicht gekaut werden, wenn sie über einen Host weitergeleitet werden, der ein anderes Codierungsschema als das vom ursprünglichen Client verwendete verwendet.

Es gibt viele verschiedene Hosts auf den Intertubes, und Sie können nicht wirklich davon ausgehen, dass etwas anderes als 7-Bit-ASCII unterstützt wird, ohne Datenverlust / -verwirrung zu riskieren.

IBM Mainframes verwenden beispielsweise eine Codierung namens EBCDIC (die in vielen verschiedenen Varianten erhältlich ist). Die Codepunkte unterscheiden sich vollständig von den Codepunkten, die von ASCII-basierten Computern verwendet werden. In ASCII sind die Buchstaben AZ 0x41 - 0x5A. In EBCDIC sind die Buchstaben A - Z nicht einmal ein zusammenhängender Bereich: Die Buchstaben AI leben bei 0xC1 - 0xC9, die Buchstaben JR leben bei 0xD1 - 0xD9 und die Buchstaben SZ leben bei 0xE2 - 0xE9.

Nicholas Carey
quelle
0

Standardmäßig dürfen die Parameter des Nachrichtenkopffelds in HTTP-Nachrichten (Hypertext Transfer Protocol) keine Zeichen außerhalb des ISO-8859-1-Zeichensatzes enthalten.

Wenn Benutzername und Kennwort einen inkompatiblen Zeichensatz enthalten, kann HTTP diesen Text nicht übertragen. Um dies zu verhindern, verschlüsseln wir Benutzername und Passwort mit base64, um sicherzustellen, dass wir HTTP-kompatibles Zeichen über HTTP senden. Weitere Informationen finden Sie in dieser Basic_access_authentication

Varun
quelle