4@%@

Edit v4.000 from 2005-05-13 to 2019-11-12 by HSc

UUE-Encode/Decode

Die Aufgabe der UUE-Codierung/Decodierung (/305/ S. 277-282: UUEncode) ist auf einen Versandweg, welcher nur Textzeichen akzeptiert, auch binäre Daten übertragen zu können.
Dazu wurden die binären Daten beim Absender durch die UU-Kodierung in Text-Zeichen umgewandelt und beim Empfänger mittels UUE-Dekodierung wieder in eine binäre Datei zurück gewandelt. Wie ist die Funktionsweise mit Beispiel Datei und Methode?

Funktionsweise

Datei

Datei Sieb10B.COM, mit folgenden 17 Byte als Inhalt, wird im folgenden als Beispiel genutzt. Das Hex-Listing lautet:
Adresse: Code, hexadezimal und als ASCII-Zeichen
0000-0000H: 52 01 60 01 6E 01 7C 01-8A 01 98 01 A6 01 B4 01 =R.`.n.|.-�.�.�.�.
0000-0010H: C2 __ __ __ __ __ __ __-__ __ __ __ __ __ __ __ =Â

Methode

In den folgenden 5 Schritten wird eine Sieb10B.UUE - Datei generiert!

Tabelle 01: 24Bit als 3 Mal 8 Bit
Nummer 1. 2. 3.
Bytes 52H 01H 60H
Bits 0101   0010B 0000   0001B 0110   0000B
  1. In der zu generierenden Datei wird der Beginn des UUE-Bereiches durch
    1. das Wort >begin<,
    2. die Rechte auf die Datei in Oktalform >0644< und
    3. den originalen Namen der Datei >Sieb10B.COM<
    , in der Zeile vor der eigentlichen Codierung, angezeigt. Beispiel:
    eMail vom 23.03. mit einer Datei in der Anlage
    begin 0644 Sieb10B.COM
  2. Die Base64-Codierung, auch drei-zu-vier-Codierung genannt, beginnt:
    Tabelle 02: Umstellung der 3 Mal 8 Bit auf 4 Mal 6 Bit
    2b 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 B
    2c 010100B 100000B 000101B 100000B
    2d 00   010100B 00   100000B 00   000101B 00   100000B
    2d 0001   0100B 0010   0000B 0000   0101B 0010   0000B
    +20H 0011   0100B 0100   0000B 0010   0101B 0100   0000B
    ASCII 4 @ % @
    1. Entnahme von 3 Byte ab Adresse 0000-0000H: 52 01 60. Fall es weniger als 3 Bytes sind, sind diese mit Null-Bytes 00H aufzufüllen. Dies ist hier, in unserem Beispiel, ab Adresse 0000-0000F: 01 C2 00 der Fall.
    2. Die 3 Bytes in jeweils 3 8Bit-Folgen umwandeln.
      Zum Beispiel:
      =52H   01H   60H
      =0101 0010B   0000 0001B   0110 0000B
    3. Die 3 8Bit-Folgen = 24Bit in 4 6Bit-Folgen = 24Bit umstellen. Zum Beispiel:
      = 0101 0010 B 0000 0001 B 0110 0000 B
      = 0101 00 B 10   0000 B 0001   01 B 10 0000 B
      = 01 0100 B 10   0000 B 00 01 01 B 10 0000 B
      Der Wertebereich einer 6 Bit-Folge reicht von 00 0000B=00H=0D bis
      11 1111B=3FH=63D
    4. Die 6 Bit-Folgen werden mit zwei Führungsnullen auf 8 Bit erweitert.
      =0001 0100B 0010 0000B 0000 0101B 0010 0000B
      Da die Führungsnullen keinem Einfluss auf die Größe haben, reicht der Wertebereich immer noch von 0D bis 63D. Aber die Anzahl der Bits hat sich damit von 3*8=4*6, plus die zwei Führungsnullen pro 6Bit-Folge, ergibt 4*(2+6)Bit=4*8Bit=32Bit erhöht. D.h. eine Datei, die damit Codiert wird, würde sich auf 32Bit/24Bit=4/3=133% vergrößern.
    5. Da in der ASCII-Tabelle die Text-Zeichen ab 20H=0010 000B==32D mit dem Leerzeichen beginnen und davor sich die Steuerzeichen, wie z.Bsp. Zeilenvorschub, befindenen, wird der Wert der auf 8 Bit erweiterten 6 Bit-Folgen
      =0001 0100B, 0010 0000B, 0000 0101B, 0010 0000B
      um 20H=10 0000B erhöht. Dies ergibt:
      0011 0100B, 0100 0000B, 0010 0101B, 0100 0000B,
    6. Diese 8 Bit-Folgen werden in Hexadezimalzahlen umgewandelt und repräsentieren jeweils ein Zeichen aus der ASCII-Tabelle
      0011 0100B=34H ->4<
      0100 0000B=40H ->@<
      0010 0101B=25H ->%<
      0100 0000B=40H ->@<
    Das Ergebnis der gesamten Codierung der Datei Sieb10b.COM besteht aus sechs 4er Gruppen. Diese sind jeweils durch senkrechte Striche | eingeschlossen und lauten:
    |4@%@| | 6X!| |? &*| | 9@!| |I@&T| | <( |
  3. Oftmals wird in dem so generierten Text, das Leerzeichen durch ` ersetzt! Damit kann der Textblock besser erkannt werden, da dieser nicht mehr durch Leerzeichen unterbrochen wird.
    |4@%@| |`6X!| |?`&*| |`9@!| |I@&T| |`<(`|
  4. Die Textzeichen werden zu maximal 45 Zeichen pro Zeile in der UUE-Datei eingetragen. Vor jeder Zeile steht UUE-Kodiert die Anzahl der Zeichen in dieser Zeile. In unserem Beispiel sind dies 6*4=24 Zeichen. Plus 20H=32D, ergibt 56 und dies ist in der ASCII-Tabelle das Zeichen 8. Damit würde bis jetzt unser Beispiel wie folgt aussehen:
    eMail vom 23.03. mit einer Datei in der Anlage
    begin 0644 Sieb10B.COM
    84@%@`6X!?`&*`9@!I@&T`<(`
  5. Abgeschlossen wird die Datei mit
    1. einer, der vorletzten, Zeile von 0 Zeichen. Das bedeutet Anzahl gleich 0. Plus Leerzeichen 20H=32D ergibt 32D. Leerzeichen werden aber durch ` ersetzt. Dadurch kann man erkennen ob diese Version die Ersetzung durchführt oder nicht.
    2. Und der letzten Zeile mit dem Word >end<. Falls danach noch etwas kommt, hat dies nichts mit der eingelagerten UUE-Datei zu tun.
    Die fertige UUE-Datei unseres Beispiels würde dann wie folgt aussehen:
    eMail vom 23.03. mit einer Datei in der Anlage
    begin 0644 Sieb10B.COM
    84@%@`6X!?`&*`9@!I@&T`<(`
    `
    end
    No Virus found
    und fertig!