Uuencode (Uuencode/Uudecode)
Was ist Uuencode (Unix-to-Unix Encoding)?
Uuencode (auch Uuencode/Uudecode genannt) ist ein beliebtes Dienstprogramm zum Codieren und Decodieren von Dateien, die zwischen Benutzern oder Systemen in einem Netzwerk ausgetauscht werden. Es wurde ursprünglich für die Verwendung zwischen Benutzern von UNIX-Systemen entwickelt (sein Name steht für Unix-to-Unix Encoding).
Der Befehl nimmt die Standardeingabe und gibt eine codierte Version an die Standardausgabe aus. Diese codierte Datei mit ASCII-Zeichen ist in der Regel größer als die ursprüngliche Binärdatei.
Wenn eine Datei oder ein E-Mail-Anhang (Bild, Textdatei oder Programm) über ein Netzwerk übertragen wird, können nicht druckbare Zeichen vom Netzwerk als Befehle interpretiert werden. Dies kann zu unbeabsichtigten Folgen führen. Aus diesem Grund ist es nicht sicher, Dateien mit nicht druckbaren Zeichen zu übertragen.
Uuencode löst dieses Problem, indem es eine Datei oder einen E-Mail-Anhang von ihrer binären oder Bitstream-Darstellung in den 7-Bit-ASCII-Textsatz übersetzt oder konvertiert. Mit Uuencode kann Text von älteren Systemen verarbeitet werden, die mit Binärdateien nicht so gut umgehen können. Außerdem lassen sich größere Dateien leichter in mehrere Übertragungen aufteilen.
Beim Codieren werden nur druckbare ASCII-Zeichen verwendet. Sie enthält den Dateimodus und den von Uudecode verwendeten Operandennamen, der die codierten Daten in ihre ursprüngliche Form umwandelt.
Uuencode wird in mehreren Programmiersprachen unterstützt, darunter:
- Python: Verwendung des Codecs-Moduls mit dem Codec uu
- Perl: Unterstützt uuencoding nativ mit den Operatoren pack() und unpack() und dem Formatstring u
Uuencode und Uudecode
Die Befehle uuencode und uudecode arbeiten zusammen.
- Uuencode konvertiert eine Binärdatei in ASCII-Daten.
- Uudecode konvertiert die codierte Datei, die ASCII-Daten enthält, zurück in ihre ursprüngliche Binärdatei.
Die resultierende Datei heißt name (oder, wenn die Option -o angegeben ist: outfile). Sie behält in jeder Hinsicht den Modus der Originaldatei bei, mit der Ausnahme, dass sie setuid (root-owned set user ID) und die execute-Bits nicht beibehält.
Bedeutung von Uuencode
E-Mail-Nachrichten gehen oft an (oder durch) Computer mit unterschiedlichen Zeichensätzen. Manchmal werden sie von Programmen verarbeitet, die nicht 8-Bit-sauber sind. Ein 8-Bit-sauberes System kann mit erweiterten Zeichensätzen, die alle 8 Bits eines Bytes verwenden, korrekt umgehen, was diese Zeichensätze von ASCII unterscheidet.
Ein solches ASCII-System geht davon aus, dass alle Zeichen einen Code im Bereich von 0 bis 127 haben, so dass das oberste Bit jedes Bytes als Paritätsbit oder Flag Bit verwendet werden kann. Diese Annahme funktioniert mit Englisch, aber nicht mit anderen Sprachen, die ein größeres Alphabet haben.
Wenn eine Binärdatei ( zum Beispiel eine E-Mail-Nachricht) über ein System oder eine Kommunikationsverbindung gesendet wird, die nicht 8-Bit-sauber ist, kann sie beschädigt werden. An dieser Stelle spielt der Befehl Uuencode eine entscheidende Rolle. Uuencode verwendet nur ASCII-Zeichen.
Das Codieren von Binärdateien mit Uuencode schützt sie vor Verfälschungen. Uudecode kehrt dann die Auswirkungen von Uuencode um, so dass die Dateien intakt und unverändert am Zielort ankommen.
Syntax und Funktionsweise von Uuencode
Uuencodierte Daten beginnen mit einer Zeile in der Form:
begin <Modus> <Datei>
<Modus> ist die Lese-/Schreib-/Ausführungsberechtigung der Datei
<Datei> ist der Name, der bei der Neuerstellung der Binärdaten verwendet werden soll
Beispiel: begin 644 meineDatei.zip
Parameter
- SourceFile: Gibt den Namen der binären Eingabedatei an; Vorgabe ist die Standardeingabe.
- RemoteFile: Gibt den Namen der decodierten Datei an.
Umgebungsvariablen für die Lokalisierung
- LANG
- LC_ALL
- LC_CTYPE
- LC_MESSAGES
- NLSPATH
Wie funktioniert Uuencode?
Uuencode nimmt eine Gruppe von drei vorformatierten Bytes (24 Bits) auf und teilt sie in vier Gruppen von je sechs Bits auf. Diese Gruppen werden als Zahlen mit den Werten 0-63 behandelt. Wenn weniger als drei Bytes übrig sind, werden Nullen am Ende angehängt.
- Außerdem werden Anfangs-/Endmarkierungen, Dateinamen und Begrenzungszeichen hinzugefügt.
- Dezimal 32 wird zu jeder Zahl hinzugefügt.
- Die neuen Zahlen werden als ASCII-Zeichen von 32 (Leerzeichen) bis 95 (Unterstrich) ausgegeben.
- Jede Gruppe von 60 Ausgabezeichen (45 Eingabebytes) wird in einer eigenen Zeile ausgegeben.
- Jeder Zeile wird ein M vorangestellt.
- Wenn am Ende der Eingabe nach der letzten Gruppe von 60 Zeichen noch N Ausgabezeichen übrig sind und N>0 ist, wird ihnen das Zeichen mit dem Code 32+N vorangestellt.
- Die Ausgabe besteht aus einer Zeile, die nur ein einzelnes Leerzeichen enthält, und einer Zeile, die das Wort end enthält.
Geschichte von Uuencode
Der Befehl uuencode erschien erstmals in Berkeley Software Distribution (BSD) 4.0. BSD war ein Betriebssystem, das auf dem Quellcode des in den 1970er Jahren in den Bell Labs entwickelten Betriebssystems Research Unix basierte. Obwohl BSD und seine Derivate schließlich eingestellt wurden, verwenden viele aktuelle proprietäre Betriebssysteme, darunter macOS und iOS von Apple, seine Nachfahren.
Der Name Uuencode stand für Unix-to-Unix-Encoding, da es ursprünglich für die Benutzer von Unix-Systemen gedacht war. Die Idee bestand darin, eine sichere Codierungsmethode zu verwenden, um Dateien von einem Unix-System zu einem anderen zu übertragen. Es wurde mit UUCP (Unix to Unix Copy Protocol) verwendet. Das Unix-Dienstprogramm kopierte Dateien von einem Computer auf einen anderen, um binäre Dateien über serielle Leitungen zu übertragen, bei denen das oberste Bit der Zeichen nicht erhalten blieb.
Heute wird Uuencode verwendet, um Binärdateien im ASCII-Format direkt über das Internet, per E-Mail, in USENET-Newsgroups und so weiter zu versenden, wenn die beteiligten Systeme nur das ASCII-Format unterstützen.