Base64 decode

19/09/2013 - 13:58 von Oliver Nass | Report spam
Hallo Leute,

ich habe ein Problem mit dem Dekodieren von Base64.
Bisher bekam ich immer E-Mail-Anhànge mit einer Zeichenlànge von 72.

Nun bekomme ich zusàtzlich von einem anderen Sender eine Lànge von 76.

Die Anhànge selbst kann ich mir im E-Mail-Programm anzeigen lassen, nur die Verabeitung mit Perl schlàgt fehl (unter Linux /var/mail/user):

.
open(QUELL, "+< $ziel/$findarray[$i]");

use MIME::Base64 qw(decode_base64);

while($buf = <QUELL>)
{
$buf =~ s/$find//g;
$buf =~ s/filename.*//g;
push(@newarray, decode_base64($buf));
}
seek(QUELL,0,0);
print QUELL @newarray;
truncate(QUELL,tell(QUELL));
close(QUELL);


Und so beginnen die Anhànge:

Der wo funktioniert:

name="file.csv"
filename="file.csv"

I1dlZCBTZXAgMTggMjI6MjM6MTggQ0VTVCAyMDEzDQpmaWxlbmFtZT1ERURFTE0yMDEzLTA5
LTEzLmNzdg0KZGF0ZT0yMDEzLTA5LTEzDQpmaWxlcGF0aD1DXDpcXFVzZXJzXFxSZWluaGFy
ZCBXYWNodGVyXFxEZXNrdG9wXFxFQU5wb2xsIHBvcnRhYmxlXFx1c2VyZGlyXFxjc3YgRGVs
bWVuaG9yc3QgMjAxM1xcREVERUxNMjAxMy0wOS0xMy5jc3YNCnN0YXRpb25uYW1lPURFREVM


und der wo nicht funktioniert:

creation-date="Thu, 19 Sep 2013 10:00:15 GMT";
modification-date="Mon, 16 Sep 2013 10:03:36 GMT"

I01vbiBTZXAgMTYgMTI6MDM6MzYgQ0VTVCAyMDEzDQpmaWxlbmFtZT1ERU5FU1QyMDEzLTA5LTE1
LmNzdg0KZGF0ZT0yMDEzLTA5LTE1DQpmaWxlcGF0aD1JXDpcXERlemVybmF0MzAzXFxOU1RcXEVB
TnBvbGxfTmV1c3RyZWxpdHpcXHVzZXJkaXJcXDIwMTNfTmV1c3RyZWxpdHpcXERFTkVTVDIwMTMt


Stehe total auf dem Schlauch. Weiß jemand mehr?

Danke und Gruß
Oliver
 

Lesen sie die antworten

#1 Bjoern Hoehrmann
19/09/2013 - 18:54 | Warnen spam
* Oliver Nass wrote in de.comp.lang.perl.misc:
use MIME::Base64 qw(decode_base64);

while($buf = <QUELL>)
{
$buf =~ s/$find//g;
$buf =~ s/filename.*//g;
push(@newarray, decode_base64($buf));
}



Base64 kann nicht zeilenweise dekodiert werden. Eine Base64 Zeichenkette
sieht ja so aus:

<6 bit von byte #1>
<2 bit von byte #1, 6 bit von byte #2>
<2 bit von byte #2, 6 bit von byte #3>
...

Wenn der Zeilenumbruch an der falschen Stelle kommt, dann bleibt oder
fehlt ein Rest. Bei manchen Zeilenlàngen hat man Glück und das passiert
nicht, aber sonderlich robust ist das nicht.

Davon ab, wenn $buf Base64-kodiert ist, dann machen die Ersetzungen in
deinem Code keinen Sinn; wenn $buf nicht Base64-kodiert ist, dann macht
das dekodieren keinen Sinn. Wenn die Ersetzungen dazu da sein sollen, um
den Base64-kodieren Teil von `QUELL` zu isolieren, dann würde ich mal
gucken, ob das überhaupt richtig funktioniert.
Björn Höhrmann · mailto: · http://bjoern.hoehrmann.de
Am Badedeich 7 · Telefon: +49(0)160/4415681 · http://www.bjoernsworld.de
25899 Dagebüll · PGP Pub. KeyID: 0xA4357E78 · http://www.websitedev.de/

Ähnliche fragen