UTF-7

FONT SIZE:
fontsize_dec
fontsize_inc
Dezember 29, 2016 Anne Kurz U 0 33

UTF-7 ist ein variabler Länge Zeichencodierung, die für die Darstellung von Unicode Text unter Verwendung eines Stroms von ASCII-Zeichen vorgeschlagen. Es war ursprünglich ein Mittel zur Unicode-Textkodierung für die Verwendung in Internet-E-Mail-Nachrichten, die effizienter als die Kombination von UTF-8 mit quoted-printable war zu schaffen.

Motivierung

MIME, dem modernen Standard der E-Mail-Format, verbietet Kodierung von Kopfzeilen mit Byte-Werte über dem ASCII-Bereich. Obwohl MIME ermöglicht den Nachrichtentext in verschiedenen Zeichensätzen kodiert, ist die zugrunde liegende Übertragungsinfrastruktur immer noch nicht gewährleistet zu sein 8-Bit-sauber. Daher hat eine nicht-triviale Inhalte Transfer-Codierung, um in Zweifelsfällen angewendet werden. Leider Base64 hat einen Nachteil, dass auch US-ASCII-Zeichen unlesbar nicht MIME-Clients. Auf der anderen Seite, UTF-8 in Kombination mit quoted-printable erzeugt eine sehr größen ineffiziente Format erfordern 6-9 Bytes für Nicht-ASCII-Zeichen aus dem BMP und 12 Byte für Zeichen außerhalb der BMP.

Sofern bestimmte Regeln werden während der Codierung gefolgt, UTF-7 können in E-Mail verschickt werden kann, ohne eine zugrunde liegende MIME-Übertragungscodierung, aber immer noch müssen explizit als Text-Zeichensatz identifiziert werden. Darüber hinaus, wenn im E-Mail-Kopfzeilen wie "Betreff:" verwendet, UTF-7 muss im MIME-codierte Wörter identifiziert den Zeichensatz enthalten sein. Seit codierten Worten zwingen Verwendung von entweder quoted-printable oder base64 wurde UTF-7 entwickelt, um zu vermeiden, mit dem Gleichheitszeichen als Escape-Zeichen, um Doppel Entweichen zu vermeiden, wenn sie mit quoted-printable kombiniert wird.

UTF-7 wird im Allgemeinen nicht als native Darstellung in Anwendungen eingesetzt, da es sehr schwierig zu verarbeiten. Trotz seiner Größe Vorteil gegenüber der Kombination von UTF-8 entweder mit quoted-printable oder base64 empfiehlt der Internet Mail Consortium gegen ihre Verwendung.

8BITMIME wurde ebenfalls eingeführt, die die Notwendigkeit, Nachrichtentexte in einem 7-Bit-Format kodieren reduziert.

Eine modifizierte Form der UTF-7 ist derzeit in den IMAP-E-Mail-Abruf-Protokoll für Mailbox-Namen verwendet.

Bezeichnung

UTF-7 wurde zum ersten Mal als ein experimentelles Protokoll in RFC 1642 vorgeschlagen, A-Post Sichere Transformation Format von Unicode. Dieser RFC wurde von RFC 2152, RFC-Informativ, die nie zu einem Standard obsolet gemacht. Da RFC 2152 eindeutig fest, der RFC "nicht angeben, ein Internet-Standard von allen". Trotz dieser RFC 2152 ist die Definition von UTF-7 in der IANA-Liste der Zeichensätze angegeben. Weder ist UTF-7 eine Unicode-Standard. Der Unicode-Standard 5.0 listet nur UTF-8, UTF-16 und UTF-32. Es gibt auch eine modifizierte Version, die in RFC 2060 der manchmal als UTF-7 identifiziert wird spezifiziert.

Einige Zeichen können direkt als einzelnes ASCII-Zeichen dargestellt werden kann. Die erste Gruppe wird als "direkte Zeichen" bezeichnet und enthält 62 alphanumerischen Zeichen und Symbolen 9 :. Die direkten Charaktere sind sicher zu wörtlich enthalten. Die andere Hauptgruppe, als "optional direkte Zeichen" genannt, enthält alle anderen druckbaren Zeichen im Bereich U + 0020-U + 007E Ausnahme und Raum. Mit den optionalen direkten Zeichen reduziert Größe und verbessert die menschliche Lesbarkeit, sondern erhöht auch die Wahrscheinlichkeit eines Bruchs durch Dinge wie schlecht konzipiert Mail-Gateways und kann zusätzliche Entkommen, wenn in codierter Worte für Header-Felder verwendet.

Leerzeichen, Tabulator, Wagenrücklauf und Zeilenvorschub kann auch direkt als einzelne ASCII-Zeichen dargestellt werden kann. Allerdings, wenn die codierten Text ist es, in E-Mails verwendet werden, ist Sorgfalt erforderlich, um sicherzustellen, dass diese Zeichen werden in einer Weise, die nicht weiter Content-Transfer-Codierung erfordern geeignet für E-Mail zu sein verwendet. Das Plus-Zeichen können als codiert werden.

Andere Zeichen müssen in UTF-16 in modifizierter Base64 codiert werden und dann. Der Start dieser Blöcke modifizierter Base64 kodierte UTF-16 wird von einem Zeichen versehen. Das Ende wird durch jedes Zeichen, das nicht in der modifizierten Base64-Set angezeigt. Wenn das Zeichen nach dem modifizierten Base64 ist dann durch den Decoder verbraucht und Decodierung beginnt wieder mit dem nächsten Zeichen. Ansonsten Decodierung fortgesetzt mit dem Charakter nach dem base64.

Verwirrend, Microsoft in its.NET Dokumentation nennt seine LEB128 String-Länge-Kodierung UTF-7: ". Eine Länge-Präfix-String stellt die Länge der Zeichenfolge durch Voranstellen auf den String ein einzelnes Byte oder Wort, das die Länge dieser Zeichenfolge enthält erste schreibt diese Methode die Länge der String als UTF-7 codiert Ganzzahl ohne Vorzeichen, und dann schreibt, dass viele Zeichen in den Stream mit Hilfe der Binarywriter-Instanz aktuelle Codierung. " Das begleitende Beispiel Code zeigt jedoch, dass anstelle der UTF-7, einem Little-Endian variabler Länge identische Menge an LEB128 verwendet wird; und dass in der Tat die Zählung ist eine Byte-Zählung und nicht ein Zeichenanzahl.

Beispiele

  • "Hallo Welt!" wird codiert als "Hallo Welt!"
  • "1 + 1 = 2" wird codiert als "1 + - 1 = 2"
  • "£ 1" als "+ AKM-1" kodiert. Die Unicode-Codepunkt für das Pfund-Zeichen U + 00A3, die, wie in der unten stehenden Tabelle in modifizierte Base64 konvertiert. Es gibt zwei Bits übrig, die auf 0 aufgefüllt werden.

Algorithmus zum Kodieren und Dekodieren

Codierung

Erstens muss ein Geber entscheiden, welches Zeichen direkt in ASCII-Form, die als maskiert werden muss darstellen und welche in Blöcken von Unicode-Zeichen zu platzieren. Ein einfacher Encoder können alle Zeichen es sicher für direkte Kodierung direkt hält kodieren. Die Kosten für die Beendigung einer Unicode-Sequenz, outputing ein einzelnes Zeichen direkt in ASCII und dann ausgehend eine weitere Unicode-Sequenz ist jedoch 3 bis 3⅔ Bytes. Dies ist mehr als die 2⅔ Bytes benötigt, um das Zeichen als ein Teil einer Unicode-Sequenz repräsentieren. Jedes Unicode-Sequenz sind unter Verwendung des folgenden Verfahrens, dann mit den entsprechenden Begrenzer umgeben codiert werden.

Unter Verwendung des £ † Zeichenfolge als Beispiel:

  • Express den Charakter der Unicode-Zahlen im Binär:
    • 0x00A3 → 0000 0000 1010 0011
    • 0x2020 → 0010 0000 0010 0000
  • Verketten Sie die binären Folgen:
    0000 0000 1010 0011 und 0010 0000 0010 0000 → 0000 0000 1010 0011 0010 0000 0010 0000
  • Gruppieren der binären in Gruppen von sechs Bits, beginnend von links:
    0000 0000 1010 0011 0010 0000 0010 0000 → 000000 001010 001100 100000 001000 00
  • Wenn die letzte Gruppe mit weniger als sechs Bits, fügen Nullen:
    000000 001010 001100 100000 001000 00 → 000000 001010 001100 100000 001000 000000
  • Ersetzen Sie jede Gruppe von sechs Bits mit einem entsprechenden Base64-Code:
    000000 001010 001100 100000 001000 000000 → AKMgIA

Decoding

Zunächst eine kodierte Daten müssen in ASCII-Text Brocken und nicht leer, wie in der Beschreibung Abschnitt erwähnt Unicode-Blöcke getrennt werden. Sobald dies geschehen ist, muss jeder Unicode-Block mit der folgenden Prozedur decodiert werden

  • Express jeden Base64-Code als Bitfolge es darstellt:
    AKMgIA → 000000 001010 001100 100000 001000 000000
  • Gruppieren der binären in Gruppen von sechzehn Bits, beginnend von links:
    000000 001010 001100 100000 001000 000000 → 0000000010100011 0010000000100000 0000
  • Wenn es eine unvollständige Gruppe am Ende, entsorgen Sie sie:
    0000000010100011 0010000000100000
  • Jede Gruppe von 16 Bit ist ein Zeichen der Unicode-Nummer und kann in anderen Formen ausgedrückt werden:
    0000 0000 1010 0011 ≡ ≡ 0x00A3 16310

Sicherheit

UTF-7 ermöglicht es, mehrere Darstellungen derselben Quellzeichenfolge. Insbesondere ASCII-Zeichen können als Teil des Unicode Blöcke dargestellt werden. Als solcher, wenn Standard-ASCII-basierte Flüchten oder Validierungsprozesse auf Zeichenfolgen, die später als UTF-7 dann Unicode-Blöcke interpretiert werden können, verwendet werden, können verwendet werden, um böswillige Saiten an ihnen vorbei rutschen werden. Um dieses Problem zu Systeme sollten Decodierung vor der Validierung durchführen zu mindern und vermeiden sollten Sie versuchen, UTF-7 automatisch erkennen.

Ältere Versionen von Internet Explorer kann in der Interpretation der Seite als UTF-7 ausgetrickst werden. Dies kann für eine Cross-Site-Scripting-Angriff, wie die und Markierungen verwendet werden können, wie und in UTF-7, die die meisten Prüfer durchzulassen als einfacher Text codiert werden.

(0)
(0)
Kommentare - 0
Keine Kommentare

Fügen Sie einen Kommentar

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Zeichen übrig: 3000
captcha