Ich habe mich mit Base64-Codierung befasst und Folgendes bei Wikipedia gefunden:
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 die Verarbeitung von Textdaten ausgelegt sind.
... und das Beispiel zeigt das Versenden von Binärdateien per E-Mail.
Ich versuche zu verstehen, warum base64 benötigt wird. Da es sich bei den Binärdaten um eine Reihe von Bytes handelt, kann sie dann nicht direkt in ASCII übersetzt werden, also in Textdaten? Warum wird base64 überhaupt benötigt? Oder hat E-Mail ein Problem mit den Steuerzeichen in ASCII?
Antworten:
Es gibt einen guten Wikipedia-Artikel dazu.
Die frühesten von ARPAnet verwendeten Iterationen von NCP ähnelten eher Bitströmen als Byteströmen oder versuchten, eine geeignete Bytegröße auszuhandeln. Das 8-Bit-Byte wurde erst viel später standardisiert. Es gab auch mehrere Versuche, Dateiübertragungsprotokolle zu erstellen, die auf verschiedenen Computern funktionieren würden (E-Mail war anfangs eine Funktion des FTP-Protokolls, in erster Linie als Befehl
MAIL
undMLFL
, dann aufgeteilt in MTP , später SMTP ). Diese Maschinen hatten oft unterschiedliche Zeichenkodierungen - ASCII vs EBCDIC - oder sogar unterschiedliche Byte-Größen , 8-Bit-Bytes vs 6-Bit vs ...Daher wurden ursprünglich Mail-Übertragungsfunktionen definiert, um relativ kurze Nachrichten im Klartext zu übertragen. speziell "NVT-ASCII". Zum Beispiel sagt RFC 772 :
Obwohl acht Bits über die Leitung übertragen wurden, wurde das achte Bit häufig verworfen oder beschädigt, da es nicht erforderlich war, es aufzubewahren. Tatsächlich erforderten einige Protokolle, dass das 8. Bit auf Null gesetzt wurde, wie beispielsweise der im Folgenden angegebene anfängliche SMTP-RFC . Mit anderen Worten, die Software war nicht 8-Bit-sauber .
Dies blieb auch nach der Verbreitung von 8-Bit-ISO-8859- # -Zeichenkodierungen noch lange bestehen. Obwohl einige Server bereits 8-Bit-fehlerfrei waren, waren es viele andere nicht, und das blinde Senden von 8-Bit-Daten hätte zu fehlerhaften Nachrichten geführt.
Später wurde "Extended SMTP" veröffentlicht, mit dem Mailserver die von ihnen unterstützten SMTP-Erweiterungen deklarieren können. Einer davon war
8BITMIME
, dass der empfangende Server 8-Bit-Daten sicher akzeptieren konnte. MIME-Nachrichtenteile können " Content-Transfer-Encoding : 8bit" aufweisen, was darauf hinweist, dass sie in keiner Weise codiert sind.Das SMTP-Protokoll blieb jedoch zeilenbasiert und hat das Zeilenlimit von 998 Oktetten sowie die Verwendung einer
.
Zeile (0D 0A 2E 0D 0A) als "Ende der Nachricht" -Anzeige. Dies bedeutet, dass, obwohl die meisten Binärdateien unverändert gesendet werden konnten, Dateien, die diese Oktettfolge enthalten, möglicherweise als Ende der übertragenen Nachricht und der Rest der Datei als SMTP-Befehl interpretiert werden und möglicherweise Schäden verursachen. In ähnlicher Weise kann eine "Zeile", die länger als 998 Oktette ist, vom empfangenden Server abgeschnitten werden.Im Jahr 2000 wurde die ESMTP-Erweiterung "BINARYMIME" als RFC 3030 veröffentlicht , mit der die Übertragung von binären Rohdaten über SMTP möglich ist. Die Nachricht wird jetzt in Blöcken mit der angegebenen Länge übertragen, wobei ein Block mit der Länge Null als Abschluss verwendet wird. Base64- und ähnliche Codierungen werden nicht mehr benötigt. Leider unterstützen nur wenige SMTP-Server diese Erweiterung. Beispielsweise werben weder Postfix noch Exim4
CHUNKING
als Antwort auf EHLO. Um die Vorteile von BINARYMIME nutzen zu können, muss BINARYMIME von allen Servern im Nachrichtenpfad unterstützt werden, bei denen es sich um mehr als einen oder zwei handeln kann.Siehe auch:
quelle
Einige ältere E-Mail-Systeme und Software waren nicht 8-Bit-sauber , das 8. Bit wurde als Steuerzeichen verwendet. Dies reichte aus, um Binärdateien zu vermasseln, sodass Base64 (oder andere Kodierungsschemata) benötigt wurden.
quelle