uuencode / uudecode



  • Hallo,

    ich hab mir ein Programm geschrieben, das genanntes Codierungsverfahren codieren und wieder decodieren kann. Hab mich dabei an die Beschreibung von Wikipedia gehalten. Das dekodieren funktioniert allerdings noch nicht wenn mehre grave accents hintereinander stehen.

    Auf Wikipedia steht leider nur das hier:

    Sometimes each data line has extra dummy characters (often the grave accent (ASCII 96)) added to avoid problems with mailers that strip trailing spaces. These characters are ignored by uudecode

    Wenn ich das mache und die Zeichen ignoriere, dann stimmt ja aber die Anzahl der Zeichen pro Zeile nicht mehr. Weiter weiß ich nicht ob ich alle grave accents ignorieren soll oder eines interpretieren soll. Kann mir das jemand erklären?

    Ich würde noch gerne wissen ob heutige E-Mail-Clienten da überhaupt noch Probleme machen und wenn ja wird das Codierungsverfahren überhaupt noch eingesetzt oder werden nur noch neuere Verfahren wie Base64 benutzt?

    EDIT: Ich hab das nochmal nachgeprüft und festgestellt, dass das Auftreten der Fehler wohl gar nicht an den grave accents liegt. Vielmehr scheint die komplette Datei, die ich dekodieren will anders codiert zu sein wie es auf Wikipedia steht (jede Zeile kann ja unabhängig von den anderen übersetzt werden. Aber selbst ohne die grave accents geht es nicht).
    Mal eine Beispielzeile:

    MEAD@AQRM7DY)ICG%BK[:(,\=L$C>20*EUCR/8BP'&'H+.OT5:+`V>,*NK$%9
    


  • Du liest beim decoden die Zeichen ein und ziehst die 32 vom Wert ab, die beim encoden drauf addiert wurden. Dieser Accent hat den Wert 96, also 96 - 32 = 64. 64 in Binär sieht so aus: 1000000. Wie man sieht sind die untersten 6 Bits alle 0, mehr werden sowieso nicht verwendet.

    Was für ein Zeichen du einliest ist dir (dem Decoder) egal. Du ziehst immer brav die 32 ab und verwendest die 6 untersten Bits (least significant bits) um die ursprünglichen Daten wiederherzustellen.

    Schön finde ich auch dieses Beispiel. Musst dir dann halt nur die Schritte rückwärts denken 😉

    Ich hoffe das hat dir die Sache etwas erleuchtet!



  • Ich hab beim Decoden tatsächlich vergessen, dass nur die ersten 6 least significant Bits wichtig sind - im Endeffekt hat das aber keine Auswirkungen gehabt, da ich immer vier Zeichen mit dem Verschiebeoperator konkateniere.

    Ich glaube, dass die Datei, die ich decoden möchte irgendwie noch einmal codiert ist. Wenn ich nämlich einen String codiere und ihn danach wieder decodiere, dann komme ich auf den Ausgangsstring. Ich hab das auch mit dem Codierer auf dieser Seite abgeglichen - mit dem gleichen Ergebnis.
    Diese Seite kann die Datei die ich selbst nicht übersetzen kann korrekt decodieren - allerdings nur wenn sie vollständig ist. Wenn ich nur eine einzelne Zeile dem Decodierer mitgebe, dann erhalte ich auch nur Binärmüll. Dabei müsste ja jede Zeile unabhängig von der anderen übersetzbar sei.

    Ich versteh das nicht. Ich häng den Inhalt der Datei mal an - vllt. macht sich ja jemand die Mühe und guckt was daran faul ist:

    begin 666 Restricted.zip
    M4L#!!0````(`%T[="_]'1M M4\\MNVT\`0NQOP/TSNM@PT0!/X4N16\`RE0%.GC.I9&TE;2CKH/J_K[ MS8#>A#I-&[;E-H%'(EY@G[/(-I',=GI;XN"H49?''YXT#LE]BNU.<!&,*(W M0&4Y7V#,F_&11NV<-TNU-!D!>HZP5"MF91^YE0-D&H2C5CAL\\T&P:#/'A*<+ M#F6(!IEXW?Q?13Q=@P[XLBHJ>L[UX,;U8+"X3I)0S^RJX=Q+3-28)@@+IK:
    MEAD@AQRM7DY)ICG%BK[:(,\=LC>20\*EUCR/8BP'&'H+.OT5:+`V>,\*NK%9
    MZ<;>Q1X"1WJOBZ#_8HQ+3?K%(U<1U-:7.HI6A]\_+/V[\\RU,J]DW!SMV@<37 M89W+>5QCL6/"MDHTQPV&UT5-<R!=?%D)MG^AR&Y3^>]::JP0H2MZ4>3UR?F, M[>18,L'"..I2K'.,BP8TF<K)YT_/IG1S#<@VZ^,KX$QO'[\\\WC_<W;V[?_-P MW>^/%.?TGPG99EJ29MCCK6JL\G%H78CJQC[CGU=S/V_M2KEN<A0?;A5UM[AC.U2*6OUOE0<KD#Q#\\MM_]\E!+`0(4!0````(%T[="_]<LYX`P(``'0#
    M```.``````````$("V@0````!297-T<FEC=&5D+G1X=%!+!08``````0`!
    +#P\```O`@``````
    `
    end



  • Ich hab es jetzt endlich geschafft die Datei doch noch in lesbare ASCII-Zeichen umzuwandeln. Die Lösung ist sogar ziemlich einfach: Die Datei ist gepackt.

    Die erste Zeile des Formats gibt die Datei an, die encodiert wurde. Ich musste die decodierten Daten also nur noch in ein zip-Archiv schreiben anstatt direkt in eine Textdatei. Das Archiv konnte ich dann ganz einfach auspacken. Der Inhalt war eine Textdatei mit lesbaren ASCII-Zeichen.

    Obwohl die Lösung so einfach war hab ich jetzt Tage gebraucht um die Lösung zu finden. Sie ist mir urplötzlich heute Nacht im Bett eingefallen...



  • Kenn ich. Man wacht morgends um 4 auf, klatscht sich vor das Hirn und wirft die Maschine an ... 😉


Log in to reply