|
Home - Programmieren - Codierungen - Die Base64 - Codierung
Hinweis: Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich. Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren. [Druckansicht] [Als E-Mail senden] [Kommentar verfassen] In diesem Dokument stelle ich die Base64-Codierung vor, die bei e-Mails recht verbreitet ist, auch wenn die meisten Anwender mit der Codierung nicht in Berührung kommen, da das Mail-Programm die Codierung/Decodierung selbstständig erledigt. Wer jedoch einmal wissen möchte, was "hinter den Kulissen" vor sich geht, kann dies hier erfahren. Die Base64 - codierten Daten sind für Menschen nicht verständlich, die Methode ist jedoch recht simpel. Ziel der Codierung ist es, eine beliebige Datei (Binärdatei) über einen Übertragungsweg zu bewegen, der normalerweise nicht dazu in der Lage wäre, Binärdaten unverändert zu übertragen. Meines Wissens nach wird die Base64 - Codierung in der Praxis nur in e-Mails benutzt, und zwar wenn an die Mail Dateien "angehängt" werden (z. B. eine .zip - Datei). Nicht jeder Mail-Gateway ist in der Lage, Binärdateien unverändert zu übertragen, und dies ist auch nicht vorgesehen, im entsprechenden FAQ ist festgehalten, dass e-Mails nur die unteren 7 Bit benutzen sollen. Desswegen müssen die Daten kodiert werden, z. B. im Base64 - Format. Leider steigt hierdurch die Datenmenge um 33 Prozent (auf 4/3), warum, dass werden wir noch sehen. Aus diesem Grunde ist es bei größeren Dateien ratsam, die Datei per FTP auf einen Server upzuloaden, und nur die URL zu versenden, falls dies möglich ist. Weiterhin ist es ratsam, die Dateien vor dem Versenden zu packen, und eine .zip/.rar/.ace/... Datei zu versenden, da die Codierung keinerlei Kompression beinhaltet, jedoch wie gesagt beliebige Binärdaten verarbeitet. Wie funktioniert diese Codierung nun? Ich beschreibe hier nur, wie die Daten codiert werden, die Decodierung läuft in genau entgegengesetzter Reihenfolge ab, es sollte also jedem möglich sein, sich ein Verfahren zur Decodierung selbst auszudenken. 1. Input: Gruppen von 24 Bit (= 3 Bytes) 2. Output: Pro Gruppe werden 4 Zeichen ausgegeben Eine Datei wird vom Beginn an eingelesen, immer 3 Bytes auf einmal, womit dann eine Variable gefüllt wird: Der Input-Datenstrom wird so geordnet, dass das erste Bit zum Bit 7 des ersten Bytes (a) wird, also zum höchstwertigsten Bit. [1-----]-[2-----]-[3-----] Byte 76543210-76543210-76543210 Bit aaaaaaaa-bbbbbbbb-cccccccc Input, das a Bit 7 war in der Datei am weitesten vorne aaaaaabb-bbbbcccc-ccdddddd Output Ich bekomme also vier Zahlen aus Output, die jeweils Werte zwischen 0 und 63 annehmen können (64 Zustände!), wobei für jede Zahl ein Zeichen in der folgenden Tabelle zugeordnet ist. Ich gebe also vier Zeichen aus, die zusammen 3 Bytes des Inputs definieren. Jedes dieser Zeichen kann in einer e-Mail auftauchen, ohne Probleme zu verursachen, da es alles Standard-ASCII-Zeichen sind. (Vom Decoder müssen alle Zeichen, die im codierten Datenstrom auftauchen, jedoch nicht in der Tabelle enthalten sind, ignoriert werden.)
Was ist jetzt aber, wenn die Dateilänge der zu codierenden Datei nicht glatt durch 3 teilbar ist? Nun, dafür gibt es das [pad]-Zeichen, es werden mehrere Fälle unterschieden: 1.) Es bleiben zum Schluss genau drei Bytes übrig: in diesem Fall wird kein [pad]-Zeichen benutzt, da daraus genau 4 Zeichen werden. 2.) Es bleibt ein Byte übrig: In dem Falle werden zwei Zeichen ausgegeben, wobei die niedrigsten 4 Bits der Index-Zahl b mit 0 gefüllt werden, anschließend werden zwei [pad]-Zeichen ausgegeben. 3.) Es bleiben zwei Bytes übrig: Es werden drei Zeichen ausgegeben, wobei die niedrigsten 2 Bits vom Index von Zeichen c mit 0 gefüllt werden, es folgt ein [pad]-Zeichen. Beispiel: --Message-Boundary-19218 Content-type: Application/ZIP; name="Info.zip" Content-disposition: attachment; filename="Info.zip" Content-transfer-encoding: BASE64 UEsDBAoAAgAAAKGhSyvuK51MDAAAAAwAAAAIAAAASW5mby50eHRUZXN0ZGF0ZWkuDQpQSwEC FAAKAAIAAAChoU sr7iudTAwAAAAMAAAACAAAAAAAAAABACAAgIEAAAAASW5mby50eHRQSwUG AAAAAAEAAQA2AAAAMgAAAAAA --Message- Boundary-19218-- Hier sehen wir einen Ausschnitt aus einer e-Mail, mit einer Base64-encodeden Datei. Wer mag, kann ja mal versuchen, ein kleines Programm zu schreiben, dass die Originaldatei (Info.zip) erzeugt. Wenn diese fehlerfrei entpackt werden kann, dann funktioniert das Programm einwandfrei.
|
Autoren:04150
Artikel:00819 Glossar:04124 News:13569 Userbeiträge:16268 Queueeinträge:05150
Projektsteuerung statt Anwesenheitskontrolle
MONDroid - your monitoring Solution for Android with PRTG-Support Red-Hosting jetzt mit erweitertem Shop-Webhosting-Angebot [Mehr News]
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
|