Ich habe hier und da Leute über "Base 64-Codierung" sprechen hören. Was wird es verwendet?
Ich habe hier und da Leute über "Base 64-Codierung" sprechen hören. Was wird es verwendet?
Antworten:
Wenn Sie einige Binärdaten haben, die Sie über ein Netzwerk versenden möchten, tun Sie dies im Allgemeinen nicht, indem Sie nur die Bits und Bytes in einem Rohformat über die Leitung streamen. Warum? weil einige Medien zum Streamen von Text gemacht sind. Sie wissen es nie - einige Protokolle interpretieren Ihre Binärdaten möglicherweise als Steuerzeichen (wie ein Modem), oder Ihre Binärdaten können durcheinander geraten, weil das zugrunde liegende Protokoll den Eindruck erweckt, dass Sie eine Sonderzeichenkombination eingegeben haben (z. B. wie FTP Zeilen übersetzt) Endungen).
Um dies zu umgehen, codieren die Benutzer die Binärdaten in Zeichen. Base64 ist eine dieser Codierungsarten.
Warum 64?
Da Sie sich im Allgemeinen darauf verlassen können, dass in vielen Zeichensätzen dieselben 64 Zeichen vorhanden sind, können Sie ziemlich sicher sein, dass Ihre Daten unbeschädigt auf der anderen Seite des Kabels landen.
Dies ist im Grunde eine Möglichkeit, beliebige Binärdaten in ASCII-Text zu codieren. Es werden 4 Zeichen pro 3 Datenbytes benötigt, plus möglicherweise ein wenig Auffüllen am Ende.
Im Wesentlichen sind alle 6 Bits der Eingabe in einem 64-stelligen Alphabet codiert. Das "Standard" -Alphabet verwendet AZ, az, 0-9 und + und / mit = als Füllzeichen. Es gibt URL-sichere Varianten.
Wikipedia ist eine ziemlich gute Quelle für weitere Informationen.
binary strings
. (Quelle) php.net/manual/en/function.pack.php
Die Base-64-Codierung ist eine Möglichkeit, Binärdaten in Text umzuwandeln, damit sie leichter in E-Mail- und HTML-Formulardaten übertragen werden können.
Es ist eine Textcodierung von Binärdaten, bei der der resultierende Text nur Buchstaben, Zahlen und die Symbole "+", "/" und "=" enthält. Es ist eine bequeme Möglichkeit, Binärdaten über Medien zu speichern / zu übertragen, die speziell für Textdaten verwendet werden.
Aber warum Base-64? Die zwei Alternativen zum Konvertieren von Binärdaten in Text, die sofort in den Sinn kommen, sind:
Base-64 ordnet 3 Bytes (8 x 3 = 24 Bit) in 4 Zeichen zu, die 6 Bit umfassen (6 x 4 = 24 Bit). Das Ergebnis sieht ungefähr so aus wie "TWFuIGlzIGRpc3Rpb ...". Daher ist das Aufblähen nur das 4/3 = 1,3333333-fache des Originals.
Abgesehen von dem, was bereits gesagt wurde, gibt es zwei sehr häufige Verwendungen, die nicht aufgeführt wurden
Hashes:
Hashes sind Einwegfunktionen, die einen Byteblock in einen anderen Byteblock fester Größe wie 128 Bit oder 256 Bit (SHA / MD5) umwandeln. Das Konvertieren der resultierenden Bytes in Base64 erleichtert die Anzeige des Hash erheblich, insbesondere wenn Sie eine Prüfsumme auf Integrität vergleichen. Hashes werden in Base64 so oft gesehen, dass viele Leute Base64 selbst als Hash verwechseln.
Kryptographie:
Da ein Verschlüsselungsschlüssel kein Text, sondern Rohbytes sein muss, muss er manchmal in einer Datei oder Datenbank gespeichert werden, für die Base64 nützlich ist. Gleiches gilt für die resultierenden verschlüsselten Bytes.
Beachten Sie, dass Base64 zwar häufig in der Kryptografie verwendet wird, jedoch kein Sicherheitsmechanismus ist. Jeder kann die Base64-Zeichenfolge wieder in ihre ursprünglichen Bytes konvertieren. Sie sollte daher nicht zum Schutz von Daten verwendet werden, sondern nur als Format zum einfacheren Anzeigen oder Speichern von Rohbytes.
Zertifikate
x509-Zertifikate im PEM-Format sind Base 64-codiert. http://how2ssl.com/articles/working_with_pem_files/
Vor Jahren, als die Mailing-Funktionalität eingeführt wurde, die im Laufe der Zeit vollständig textbasiert war, bestand Bedarf an Anhängen wie Bild und Medien (Audio, Video usw.). Wenn diese Anhänge über das Internet gesendet werden (im Wesentlichen in Form von Binärdaten), ist die Wahrscheinlichkeit, dass Binärdaten beschädigt werden, in ihrer Rohform hoch. Um dieses Problem anzugehen, kam BASE64.
Das Problem mit Binärdaten besteht darin, dass sie Nullzeichen enthalten, die in einigen Sprachen wie C, C ++ das Ende der Zeichenfolge darstellen. Wenn Sie also Binärdaten in Rohform mit NULL-Bytes senden, wird verhindert, dass eine Datei vollständig gelesen wird und beschädigte Daten enthält.
Beispielsweise :
In C und C ++ zeigt dieses "Null" -Zeichen das Ende einer Zeichenfolge. "HALLO" wird also folgendermaßen gespeichert:
HALLO
72 69 76 76 79 00
Die 00 sagt "hier anhalten".
Lassen Sie uns nun untersuchen, wie die BASE64-Codierung funktioniert.
Zu beachtender Punkt: Die Länge der Zeichenfolge sollte ein Vielfaches von 3 sein.
Beispiel 1 :
Zu codierende Zeichenfolge: "Ass", Länge = 3
1) Konvertieren Sie jedes Zeichen in eine Dezimalzahl.
a = 97, c = 99, e = 101
2) Ändern Sie jede Dezimalzahl in eine 8-Bit-Binärdarstellung.
97 = 01100001, 99 = 01100011, 101 = 01100101
Kombiniert: 01100001 01100011 01100101
3) Trennen Sie sich in einer Gruppe von 6-Bit.
011000 010110 001101 100101
4) Berechnen Sie Binär zu Dezimal
011000 = 24, 010110 = 22, 001101 = 13, 100101 = 37
5) Verdecken Sie Dezimalzeichen mithilfe des base64-Diagramms in base64.
24 = Y, 22 = W, 13 = N, 37 = 1
"Ace" => "YWNl"
Beispiel 2:
Zu codierende Zeichenfolge: "abcd" Länge = 4, es ist kein Vielfaches von 3. Um die Zeichenfolgenlänge zu einem Vielfachen von 3 zu machen, müssen wir 2-Bit-Auffüllung hinzufügen, um Länge = 6 zu machen. Das Auffüllbit wird durch das Zeichen "=" dargestellt.
Zu beachtender Punkt: Ein Füllbit entspricht zwei Nullen 00, also entsprechen zwei Füllbits vier Nullen 0000.
Starten wir also den Prozess: -
1) Konvertieren Sie jedes Zeichen in eine Dezimalzahl.
a = 97, b = 98, c = 99, d = 100
2) Ändern Sie jede Dezimalzahl in eine 8-Bit-Binärdarstellung.
97 = 01100001, 98 = 01100010, 99 = 01100011, 100 = 01100100
3) Trennen Sie in einer Gruppe von 6-Bit.
011000, 010110, 001001, 100011, 011001, 00
Da das letzte 6-Bit nicht vollständig ist, fügen wir zwei Füllbits ein, die vier Nullen „0000“ entsprechen.
011000, 010110, 001001, 100011, 011001, 000000 ==
Jetzt ist es gleich. Zwei Gleichheitszeichen am Ende zeigen an, dass 4 Nullen hinzugefügt wurden (hilft beim Decodieren).
4) Berechnen Sie Binär zu Dezimal.
011000 = 24, 010110 = 22, 001001 = 9, 100011 = 35, 011001 = 25, 000000 = 0 ==
5) Verdecken Sie Dezimalzeichen mithilfe des base64-Diagramms in base64.
24 = Y, 22 = W, 9 = j, 35 = j, 25 = Z, 0 = A ==
"Abcd" => "YWJjZA =="
In den frühen Tagen von Computern, als die Kommunikation zwischen Telefonleitungen zwischen Systemen nicht besonders zuverlässig war, wurde eine schnelle und schmutzige Methode zur Überprüfung der Datenintegrität verwendet: "Bitparität". Bei diesem Verfahren hätte jedes übertragene Byte 7 Datenbits und das 8. wäre 1 oder 0, um die Gesamtzahl von 1 Bits im Byte auf gerade zu setzen.
Daher würde 0x01 als 0x81 übertragen; 0x02 wäre 0x82; 0x03 würde 0x03 usw. bleiben
Um dieses System zu fördern, wurden bei der Definition des ASCII-Zeichensatzes nur 00-7F Zeichen zugewiesen. (Noch heute sind alle im Bereich 80-FF eingestellten Zeichen nicht Standard)
Viele Router des Tages setzen die Paritätsprüfung und die Byte-Übersetzung in Hardware um und zwingen die an sie angeschlossenen Computer, streng mit 7-Bit-Daten umzugehen. Dadurch wird erzwungen, dass E-Mail-Anhänge (und alle anderen Daten, weshalb HTTP- und SMTP-Protokolle textbasiert sind) in ein Nur-Text-Format konvertiert werden.
Nur wenige Router überlebten bis in die 90er Jahre. Ich bezweifle stark, dass einer von ihnen heute verwendet wird.
Von http://en.wikipedia.org/wiki/Base64
Der Begriff Base64 bezieht sich auf eine bestimmte MIME-Inhaltsübertragungscodierung. Es wird auch als Oberbegriff für jedes ähnliche Codierungsschema verwendet, das Binärdaten codiert, indem es numerisch behandelt und in eine Basis-64-Darstellung übersetzt wird. Die besondere Wahl der Basis ist auf den Verlauf der Zeichensatzcodierung zurückzuführen: Man kann einen Satz von 64 Zeichen auswählen, der sowohl Teil der Teilmenge ist, die den meisten Codierungen gemeinsam ist, als auch druckbar ist. Durch diese Kombination ist es unwahrscheinlich, dass die Daten während der Übertragung durch Systeme wie E-Mail geändert werden, die traditionell nicht 8-Bit-sauber waren.
Base64 kann in verschiedenen Kontexten verwendet werden:
- Evolution und Thunderbird verwenden Base64, um E-Mail-Passwörter zu verschleiern. [1]
- Base64 kann zum Übertragen und Speichern von Text verwendet werden, der andernfalls eine Trennzeichenkollision verursachen könnte
Base64 wird häufig als schnelle, aber unsichere Verknüpfung verwendet, um Geheimnisse zu verschleiern, ohne den Aufwand für die Verwaltung kryptografischer Schlüssel zu verursachen
Spammer verwenden Base64, um grundlegenden Anti-Spam-Tools auszuweichen, die Base64 häufig nicht dekodieren und daher Schlüsselwörter in verschlüsselten Nachrichten nicht erkennen können.
- Base64 wird zum Codieren von Zeichenfolgen in LDIF-Dateien verwendet
- Base64 wird manchmal verwendet, um Binärdaten in eine XML-Datei einzubetten, wobei eine Syntax verwendet wird, die der von ...... ähnelt, z. B. bookmarks.html von Firefox.
- Base64 wird auch bei der Kommunikation mit staatlichen Drucksignaturdruckgeräten (normalerweise über serielle oder parallele Anschlüsse) verwendet, um die Verzögerung bei der Übertragung von Belegzeichen zum Signieren zu minimieren.
- Base64 wird zum Codieren von Binärdateien wie Bildern in Skripten verwendet, um die Abhängigkeit von externen Dateien zu vermeiden.
- Kann verwendet werden, um Rohbilddaten in eine CSS-Eigenschaft wie Hintergrundbild einzubetten.
Bei einigen Transportprotokollen können nur alphanumerische Zeichen übertragen werden. Stellen Sie sich eine Situation vor, in der Steuerzeichen zum Auslösen spezieller Aktionen verwendet werden und / oder die nur eine begrenzte Bitbreite pro Zeichen unterstützt. Base64 wandelt jede Eingabe in eine Codierung um, die nur alphanumerische Zeichen verwendet +
, /
und die =
als Auffüllzeichen.
Die Verwendung von Base64, die ich hier beschreiben werde, ist ein Hack. Also, wenn Sie keine Hacks mögen, fahren Sie bitte nicht fort.
Ich bekam Probleme, als ich feststellte, dass mySQLs utf8 keine 4-Byte-Unicode-Zeichen unterstützt, da es eine 3-Byte-Version von utf8 verwendet. Was habe ich getan, um einen vollständigen 4-Byte-Unicode über MySQLs utf8 zu unterstützen? Nun, base64 codiert Zeichenfolgen beim Speichern in der Datenbank und base64 decodiert beim Abrufen.
Da die Base64-Codierung und -Decodierung sehr schnell ist, hat das oben Genannte perfekt funktioniert.
Sie müssen folgende Punkte beachten:
Die Base64-Codierung benötigt 33% mehr Speicherplatz
In der Datenbank gespeicherte Zeichenfolgen sind nicht für Menschen lesbar (Sie können dies als eine Funktion verkaufen, bei der Datenbankzeichenfolgen eine grundlegende Form der Verschlüsselung verwenden).
Sie können die obige Methode für jede Speicher-Engine verwenden, die Unicode nicht unterstützt.
utf8
Typ aus Gründen der Abwärtskompatibilität immer noch nur drei Bytes beträgt. Wenn Sie die reale Sache wollen, verwenden Sie utf8mb4
. Netter Hack, aber nicht mehr nötig.
Es wird zum Konvertieren beliebiger Binärdaten in ASCII-Text verwendet.
Beispielsweise werden E-Mail-Anhänge auf diese Weise gesendet.
Ich benutze es im praktischen Sinne, wenn wir große binäre Objekte (Bilder) über Webdienste übertragen. Wenn ich also einen C # -Webedienst mit einem Python-Skript teste, kann das Binärobjekt mit etwas Magie neu erstellt werden.
[In Python]
import base64
imageAsBytes = base64.b64decode( dataFromWS )
„Base64-Codierungsschemata werden häufig verwendet, wenn Binärdaten codiert werden müssen, die gespeichert und über Medien übertragen werden müssen, die für den Umgang mit Textdaten ausgelegt sind. Dies soll sicherstellen, dass die Daten während des Transports unverändert bleiben “(Wiki, 2017)
Beispiel könnte das folgende sein: Sie haben einen Webdienst, der nur ASCII-Zeichen akzeptiert. Sie möchten Benutzerdaten speichern und dann an einen anderen Ort (API) übertragen, aber der Empfänger möchte unberührte Daten erhalten. Base64 ist dafür. . . Der einzige Nachteil ist, dass die Base64-Codierung etwa 33% mehr Speicherplatz benötigt als normale Zeichenfolgen.
Ein weiteres Beispiel: uenc = url encoded = aHR0cDovL2xvYy5tYWdlbnRvLmNvbS9hc2ljcy1tZW4tcy1nZWwta2F5YW5vLXhpaS5odG1s = http://loc.querytip.com/asics-men-s-gel .
Wie Sie sehen, können wir das Zeichen "/" nicht in die URL einfügen, wenn wir die zuletzt besuchte URL als Parameter senden möchten, da wir die Attribut- / Wertregel für den Parameter "MOD rewrite" - GET brechen 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 / ”
Meistens habe ich gesehen, dass damit Binärdaten in Kontexten codiert werden, die nur ASCII- oder einfache Zeichensätze verarbeiten können.
Um etwas zu erweitern, was Brad sagt: Viele Transportmechanismen für E-Mail und Usenet sowie andere Methoden zum Verschieben von Daten sind nicht "8-Bit-sauber", was bedeutet, dass Zeichen außerhalb des Standard-ASCII-Zeichensatzes während der Übertragung möglicherweise entstellt werden - zum Beispiel 0x0D kann als Wagenrücklauf angesehen und in Wagenrücklauf und Zeilenvorschub umgewandelt werden. Base 64 ordnet alle Binärzeichen mehreren Standard-ASCII-Buchstaben und -Zahlen sowie Satzzeichen zu, damit sie nicht auf diese Weise entstellt werden.
Base64
Base64 ist ein Oberbegriff für eine Reihe ähnlicher Codierungsschemata, die Binärdaten codieren, indem sie numerisch behandelt und in eine Base 64-Darstellung übersetzt werden. Der Base64-Begriff stammt aus einer bestimmten MIME-Inhaltsübertragungscodierung.
Base64-Codierungsschemata werden häufig verwendet, wenn Binärdaten codiert werden müssen, die gespeichert und über Medien übertragen werden müssen, die für den Umgang mit Textdaten ausgelegt sind. Dies soll sicherstellen, dass die Daten während des Transports unverändert bleiben. Base64 wird häufig in einer Reihe von Anwendungen verwendet, einschließlich E-Mail über MIME und Speichern komplexer Daten in XML.
Base64 kann für viele Zwecke verwendet werden.
Der Hauptgrund ist die Umwandlung von Binärdaten in etwas Passables.
Ich verwende es manchmal, um JSON-Daten von einer Site an eine andere weiterzugeben und Informationen über einen Benutzer in Cookies zu speichern.
Hinweis: Sie können es für die Verschlüsselung "verwenden" - ich verstehe nicht, warum die Leute sagen, dass Sie es nicht können und dass es keine Verschlüsselung ist, obwohl es leicht zerbrechlich wäre und verpönt ist. Verschlüsselung bedeutet nichts anderes als die Konvertierung einer Datenfolge in eine andere Datenfolge, die entweder später entschlüsselt werden kann oder nicht, und genau das tut base64.
Eine hexadezimale Ziffer besteht aus einem Halbbyte (4 Bits). Zwei Halbbytes ergeben 8 Bits, die auch als 1 Byte bezeichnet werden.
MD5 erzeugt eine 128-Bit-Ausgabe, die mit einer Folge von 32 hexadezimalen Ziffern dargestellt wird, die wiederum 32 * 4 = 128 Bit sind. 128 Bit ergeben 16 Bytes (da 1 Byte 8 Bit ist).
Jedes Base64-Zeichen codiert 6 Bits (mit Ausnahme des letzten Nicht-Pad-Zeichens, das 2, 4 oder 6 Bit codieren kann, und der letzten Pad-Zeichen, falls vorhanden). Daher erfordert ein 128-Bit-Hash pro Base64-Codierung mindestens ⌈128 / 6⌉ = 22 Zeichen plus Pad, falls vorhanden.
Mit base64 können wir die codierte Ausgabe unserer gewünschten Länge (6, 8 oder 10) erzeugen. Wenn wir uns für eine Ausgabe mit 8 Zeichen entscheiden, belegt sie nur 8 Bytes, während sie für die 128-Bit-Hash-Ausgabe 16 Bytes belegt.
Zusätzlich zur Sicherheit wird die Base64-Codierung verwendet, um den Platzbedarf zu reduzieren.