zipfile-Modul zu langsam?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

Hallo Leute,

im nachfolgenden Quelltext stelle ich euch meine check_zipfile()-Funktion vor. Ich möchte eine *.zip-Datei auf Fehler überprüfen. Insgesamt funktioniert das Skript sowohl mit als auch ohne Passwort. Wenn die *.zip-Datei nicht passwortgeschützt ist, läuft die "Untersuchung" recht flott durch. Sobald die Zip-Datei aber passwortgeschützt ist, wird es kritisch. Die "Untersuchung" dauert wesentlich länger. Meine zip-Datei ist knapp 13 MB groß, und beinhaltet insgesamt 17 *.pdf-Dateien. Alle *.pdf-Dateien sind nicht größer als 1 MB, sie schwanken eher von 700 KB bis 900 KB. Mein Passowrt ist nur 7 Zeichen lang, bestehend aus Buchstaben und Zahlen. Die Gesamtdauer bei der "Untersuchung" mit Passwort beträgt 2 Minuten und 20 Sekunden. Nach dieser langen Wartezeit bekomme ich dann die entsprechende Print-Meldung, zum Beispiel ob die Datei beschädigt sei oder eben nicht.

Ich komme einfach nicht darauf, was diese Prozedur so dermaßen ausbremsen könnte. Hat jemand von euch eine Ahnung?

Code: Alles auswählen

def check_zipfile(zipfile_path, zip_pwd):
    try:
        with zipfile.ZipFile(zipfile_path, 'r') as f:
            f.setpassword(zip_pwd)
            try:
                ret = f.testzip()
                if ret is not None:
                    print "First bad file in zip: %s" % ret
                else:
                    print "zip file is correct"
            except RuntimeError as e:
                print e
                if 'encrypted' in str(e):
                    print 'This zip has encrypted files! Try again with a password!'
                if 'Bad password' in str(e):
                    print "Bad password"
                if 'password required' in str(e):
                    print "Password required"
            except Exception as Ex:
                print "Exception ", Ex
    except zipfile.BadZipfile as bad_zip_file:
        print "BAD", bad_zip_file
    except RuntimeError as RuEr:
        print "(RuntimeError)", RuEr
    except Exception as ex_corrupt:
        print "Exception", ex_corrupt
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Sophus: Der zip-Datei-Passwortschutz ist eher eine Spielerei:
zipfile.py hat geschrieben: ZIP supports a password-based form of encryption. Even though known
plaintext attacks have been found against it, it is still useful
to be able to get data out of such a file.
Daher ist das Entschlüsseln auch in reinem Python geschrieben und dementsprechend langsam. Welche Zeichen Du in Deinem Passwort verwendest ist für die Geschwindigkeit egal, und die Anzahl der Zeichen spielt auch nur eine sehr untergeordnete Rolle.
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

@Sirius3 Inwiefern soll der zip-Datei-Passwortschutz eine Spielerei sein? Weil die Entschlüsselung in reinem Python geschieht?
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Der Passwortschutz an sich ist eine Spielerei da er nichts schützt.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Sophus: weil die Verschlüsselung nicht heutigen Standards entspricht. Etliche Dateiformate haben gerade am Anfang der Datei immer die selben Bytes. Die zip-Kompression fängt also immer gleich an. Damit hat man automatisch den known plaintext, ohne dass man den eigentlichen Dateiinhalt kennen muß. Aus einem Vergleich der verschlüsselten Bytes mit den unverschlüsselten läßt sich das Passwort rekonstruieren. Damit hat man quasi keinen Schutz für zip-Dateien, ergo Verschlüsslung = Spielerei.
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

Ich verstehe. Ich griff deshalb auf die zip-Variante zu, weil das in Python das einzige Modul ist, was unabhängig von dem Entpackungsprogramm läuft. Ich bin ein großer Freund von WinRAR, da die Passwörter dort enorm schwer zu knacken sind. WinRar, 7zip und all die anderen Depressions-Programme, die auch Passwortschutz unterstützen, sind alle von jeweiligen Programm abhängig. Und das wollte ich eben vermeiden. Bei zipfile-Modul bruacht man kein zip-Entpackungsprogramm und somit unabhängig. Daher nahm ich diese Alternative. Aber wenn der Passwortschutz eher Spielerei ist, kann ich es auch wieder lassen.
Antworten