1043 Stimmen

Wozu dient die Base-64-Kodierung?

Ich habe gehört, dass hier und da von "Base 64 Encoding" die Rede ist. Wofür wird sie verwendet?

9 Stimmen

Aus dem Handbuch für base64_encode() : "Diese Kodierung wurde entwickelt, damit binäre Daten den Transport durch Transportschichten überstehen, die nicht 8-Bit sauber sind, wie z.B. Mail-Bodies."

14voto

Quyết Punkte 399

Base64 est un binär zu einem Textkodierungsschema die binäre Daten in einem ASCII-String-Format darstellt. Es ist für die Übertragung von im Binärformat gespeicherten Daten über die Netzwerkkanäle vorgesehen.

Der Base64-Mechanismus verwendet 64 Zeichen zur Kodierung. Diese Zeichen bestehen aus:

  1. 10 numerischer Wert: d.h. 0,1,2,3,...,9
  2. 26 Großbuchstaben: z. B. A, B, C, D,..., Z
  3. 26 Kleinbuchstaben: z. B. a,b,c,d,...,z
  4. 2 Sonderzeichen (diese Zeichen hängen vom Betriebssystem ab): z.B. +,/

Wie base64 funktioniert

Die Schritte zur Kodierung einer Zeichenfolge mit dem base64-Algorithmus sind wie folgt:

  1. Zählt die Anzahl der Zeichen in einer Zeichenkette. Wenn sie nicht ein Vielfaches von 3 ist, wird sie mit Sonderzeichen (z. B. =) aufgefüllt, um sie zu einem Vielfachen von 3 zu machen.
  2. Zeichenkette in ASCII-Binärformat umwandeln 8-Bit unter Verwendung der ASCII-Tabelle .
  3. Nach der Konvertierung in das Binärformat sind die Binärdaten in 6-Bit-Blöcke zu unterteilen.
  4. Konvertierung von 6-Bit-Binärdaten in Dezimalzahlen.
  5. Konvertierung von Dezimalzahlen in eine Zeichenkette gemäß der base64-Indextabelle. Diese Tabelle kann ein Beispiel sein aber wie gesagt, 2 Sonderzeichen können variieren.

Jetzt haben wir die kodierte Version der Eingabezeichenfolge.

Machen wir ein Beispiel: Konvertieren von String THS in eine base64-kodierte Zeichenfolge.

  1. Zählen Sie die Anzahl der Zeichen: Sie ist bereits ein Vielfaches von 3.

  2. Umwandlung in ASCII-Binärformat 8-Bit. Wir erhalten (T) 01010100 (H) 01001000 (S) 01010011

  3. Binäre Daten in 6-Bit-Blöcke unterteilen. Wir erhalten 010101 000100 100001 010011

  4. Konvertieren von 6-Bit-Binärdaten in Dezimalzahlen: Wir haben 21 4 33 19

  5. Konvertierung von Dezimalzahlen in eine Zeichenkette gemäß der base64-Indextabelle. Wir haben VEhT

12voto

Can Berk Güder Punkte 103655

Es wird zur Konvertierung beliebiger Binärdaten in ASCII-Text verwendet.

Auf diese Weise werden zum Beispiel E-Mail-Anhänge versendet.

12voto

jmr333 Punkte 173

"Base64-Kodierungsschemata werden üblicherweise verwendet, wenn Binärdaten kodiert werden müssen, die auf Medien gespeichert und übertragen werden sollen, die für Textdaten ausgelegt sind. Damit soll sichergestellt werden, dass die Daten während des Transports unverändert bleiben" (Wiki, 2017)

Ein Beispiel könnte folgendes sein: Sie haben einen Webdienst, der nur ASCII-Zeichen akzeptiert. Sie möchten die Daten des Benutzers speichern und dann an einen anderen Ort (API) übertragen, aber der Empfänger möchte die Daten unverändert erhalten. Base64 ist dafür geeignet. . . Der einzige Nachteil ist, dass die Base64-Kodierung etwa 33 % mehr Platz benötigt als normale Zeichenketten.

Ein anderes Beispiel:: uenc = url encoded = aHR0cDovL2xvYy5tYWdlbnRvLmNvbS9hc2ljcy1tZW4tcy1nZWwta2F5YW5vLXhpaS5odG1s = http://loc.querytip.com/asics-men-s-gel-kayano-xii.html .

Wie Sie sehen, können wir das Zeichen "/" nicht in die URL einfügen, wenn wir die zuletzt besuchte URL als Parameter senden wollen, weil wir damit gegen die Attribut/Wert-Regel für "MOD Rewrite" - GET-Parameter verstoßen würden.

Ein vollständiges Beispiel wäre: " http://loc.querytip.com/checkout/cart/add/uenc/http://loc.magento.com/asics-men-s-gel-kayano-xii.html/product/93/ "

8voto

Andrew Cox Punkte 10236

Ich verwende es in der Praxis, wenn wir große binäre Objekte (Bilder) über Webdienste übertragen. Wenn ich also einen C#-Webdienst mit einem Python-Skript teste, kann das Binärobjekt mit ein wenig Magie neu erstellt werden.

[In Python]

import base64
imageAsBytes = base64.b64decode( dataFromWS )

1 Stimmen

Werden die Daten schneller übertragen?

1 Stimmen

@FelipeM langsamer, nicht schneller. Base64 hat 33% Overhead (zum Preis der Sicherheit).

8voto

Basil Musa Punkte 7345

Die Verwendung von Base64, die ich hier beschreiben werde, ist eine Art Hack. Wenn Sie also keine Hacks mögen, fahren Sie bitte nicht fort.

Ich geriet in Schwierigkeiten, als ich entdeckte, dass das utf8 von MySQL keine 4-Byte-Unicode-Zeichen unterstützt, da es eine 3-Byte-Version von utf8 verwendet. Was habe ich also getan, um vollen 4-Byte-Unicode über MySQL's utf8 zu unterstützen? Nun, base64 kodiert Strings beim Speichern in der Datenbank und base64 dekodiert beim Abrufen.

Da die base64-Kodierung und -Dekodierung sehr schnell ist, funktionierte die obige Vorgehensweise perfekt.

Die folgenden Punkte sind zu beachten:

  • Base64-Kodierung benötigt 33 % mehr Speicherplatz

  • In der Datenbank gespeicherte Zeichenketten sind nicht für Menschen lesbar (Sie könnten das als eine Funktion verkaufen, dass Datenbankzeichenketten eine grundlegende Form der Verschlüsselung verwenden).

Sie können die obige Methode für jedes Speichermodul verwenden, das Unicode nicht unterstützt.

8 Stimmen

"Man könnte das als eine Funktion verkaufen, dass Datenbankstrings eine grundlegende Form der Verschlüsselung verwenden" Mir gefällt Ihr Stil :D

12 Stimmen

"Man könnte das als eine Funktion verkaufen, dass Datenbankstrings eine grundlegende Form der Verschlüsselung verwenden", was für eine schreckliche Aussage :D

4 Stimmen

Grundlegende Form der Verschlüsselung gegen jeden, der den base64-Entschlüsselungsalgorithmus nicht hat rofl :D

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X