Ok, das hier ist ein echt kniffliges Problem, ich hoffe, jemand kann mir helfen.
Ich versuche mit Perl eine Datei auf einen FTP-Server hochzuladen. Das wäre ja soweit kein Problem. Ich möchte die Datei jedoch "on-the-fly" komprimieren und verschlüsseln und hier fangen meine Probleme an.
Um das Ganze möglichst trivial zu halten benutze ich für Kompression und Verschlüsselung Standardwerkzeuge (gzip+openssl). Der Code sieht dabei im Moment wie folgt aus.
$stor_fh = $ftp->stor('TESTFILE');
open(DATA, "cat $ARGV[0] | gzip -fc | openssl enc -aes-128-cbc -salt -pass pass:supersecret |");
while (read(DATA,$buffer,1024)) {
$read += length($buffer);
print $stor_fh $buffer;
}
print "Read $read bytes\n";
close(DATA);
$stor_fh->flush;
$stor_fh->close;
print "Wrote ".$ftp->size('TESTFILE')." bytes\n";
Rufe ich das Script nun mit meiner Testdatei auf erhalte ich folgende Ausgabe:
Read 12720 bytes
Wrote 12660 bytes
Mir gehen also Bytes verloren Ich vermute stark, das es sich hierbei um das Padding von OpenSSL handelt, was die Daten mit NULL bytes auffüllt und Perl diese irgendwie unter den Tisch fallen lässt. Das Ergebnis ist auf jeden Fall, das ich die Datei nicht wieder sauber entschlüsselt und entpackt kriege ...