UU-Codierung

Sie erreichen die Funktion zur UU-Codierung bzw. UU-Decodierung über das Menü Einzelverfahren \ Tools \ Codierungen \ UU-Codierung/UU-Decodierung.

Die UU-Codierung dient dazu, beliebige Binärdaten in einem druckbaren Zeichenvorrat zu repräsentieren. Ihr Name kommt von „Unix to Unix encoding“, da sie ursprünglich nur für den Einsatz auf Unix-System gedacht war.

Die UU-Codierung ist keine Verschlüsselung: Es wird kein Schlüssel verwendet, und wenn man denselben Text ein zweites Mal codiert, erhält man denselben Output.

Die UU-Codierung fand eine weite Verbreitung, da sie eine der ersten Möglichkeiten war, beliebige Dateien per Email zu verschicken, in denen damals nur ASCII-Zeichen erlaubt waren. Auch im Usenet (eine Online-Nachrichten Plattform) fand die UU-Codierung weite Verbreitung. Die UU-Codierung ist auf den ASCII-Zeichensatz angewiesen und ermöglicht damit nur einen Datenaustausch zwischen ASCII-Plattformen. Unter anderem dadurch ist die UU-Codierung mittlerweile weitestgehend durch die Base64-Codierung abgelöst worden, welche nur Zeichen verwendet, die sowohl im ASCII- als auch im EBCDIC-Zeichensatz vorkommen.

Eine UU-codierte Datei besteht im Wesentlichen aus drei Teilen:

  1. Kopfzeile:

    Die erste Zeile beginnt immer mit einem "begin". Nach einem Leerzeichen folgen die Dateirechte in Form von drei Zahlen wie unter Unix/Linux üblich, und nach einem weiteren Leerzeichen folgt der Dateiname.
    Beispiel:

    begin 644 cryptool.exe

  2. Körper:

    Im mittleren Teil findet die eigentliche Codierung statt.
    Ähnlich wie bei Base64 werden immer je drei 8-Bit Blöcke in je vier 6-Bit Blöcke aufgeteilt.
    Zu den jeweiligen 6-Bit Werten wird dezimal 32 addiert, und dann der entsprechende ASCII-Wert verwendet. Das Addieren von 32 bewirkt, dass der Wert aus dem Bereich der Steuerzeichen (ASCII 0 bis ASCII 31) herausbewegt wird.

    Da es beim Mailversand oft Probleme mit dem Leerzeichen (= ASCII 32) gab, wird statt dem Leerzeichen das "`" (= ASCII 96) verwendet.

    Am Anfang jeder Zeile wird ein Byte geschrieben, in welchem die Anzahl der (uncodierten) Eingabezeichen vermerkt wird, auch hier wieder vermehrt um 32. Somit ist die Anzahl der Eingabezeichen pro Zeile beschränkt auf die höchste Zahl, die mit 6-Bit möglich ist: 63.

    Ein üblicher Wert für das Längenbyte ist das ASCII-Zeichen "M" (= ASCII 77). Also werden 77 - 32 = 45 Eingabezeichen – und daraus resultierend 60 codierte Zeichen – in einer Zeile dargestellt. Jede Zeile könnte eine andere Länge haben. In der Praxis jedoch sind meist alle Zeilen, mit Ausnahme der letzten, gleich lang.

    Beispiel einer Codierung: Das Wort "Cat"

    ASCII-Eingabezeichen C a t
    ASCII-Eingabezeichen, dezimal 67 97 116
    ASCII, binär 0 1 0 0 0 0 1 1 0 1 1 0 0 0 0 1 0 1 1 1 0 1 0 0
    Neuer dezimaler Wert 16 54 5 52
    +32 48 86 37 84
    UU-codierter Wert 0 V % T

    Längenbyte zu "Cat": Cat = 3 Eingabezeichen + 32 = 35 -> ASCII "#" Die Zeile lautet also:
    #0V%T

    Für den Fall, dass eine nicht durch 3 teilbare Anzahl von Zeichen im Eingabestrom vorliegt, wird immer bis zum nächsten vollen 6-bit Block aufgefüllt.

    Also:
    1. 1 Eingabezeichen = 8 Bit = 1 vollständiger 6-bit Block + 2 Bit. Diese werden mit 4 binären Nullen aufgefüllt, so dass sich zwei vollständige 6-bit Blöcke = 2 Codezeichen ergeben.

      Beispiel:
      ASCII-Eingabezeichen C
      ASCII-Eingabezeichen, dezimal 67
      ASCII, binär 0 1 0 0 0 0 1 1 0 0 0 0
      Neuer dezimaler Wert 16 48
      +32 48 80
      UU-codierter Wert 0 P
    2. 2 Eingabezeichen = 16 Bit = 2 vollständige 6-bit Blöcke + 4 Bit. Diese werden mit 2 binären Nullen aufgefüllt, so dass sich drei vollständige 6-bit Blöcke = 3 Codezeichen ergeben.

      Beispiel:
      ASCII-Eingabezeichen C a
      ASCII-Eingabezeichen, dezimal 67 97
      ASCII, binär 0 1 0 0 0 0 1 1 0 1 1 0 0 0 0 1 0 0
      Neuer dezimaler Wert 16 54 4
      +32 48 86 36
      UU-codierter Wert 0 V $


  3. Abschluss:

    Den Abschluss bildet das ASCII-Zeichen mit dem Wert 96 – gefolgt von einem Newline sowie dem Wort "end" und einem weiteren Newline.
    Beispiel:

    `
    end

Beispiel für eine komplette UU-codierte Datei:

begin 644 Beispieldatei.txt
#0V%T
`
end



Im Gegensatz zur Base64-Codierung gibt es bei der UU-Codierung keine festgelegten Standards (RFCs).

Vergleich von Base64- und UU-Codierung.

Quellen