2011-01-12 7 views
2

Ich habe einen Wörterbuchangriff auf verschlüsselte ZIP-Dateien mit der zipfile-Bibliothek gemacht. Als ich anfing, BIG-Wörterbücher zu benutzen, bekam ich manchmal falsch positive Ergebnisse, d. H. Passwort könnte "Wolle" sein und "12630" wurde als korrekt angesehen. In diesem Fall enthielt die entschlüsselte Datei offensichtlich Kauderwelsch.Zipfile-Modul gibt unzuverlässige Ergebnisse

Es ist kein Fehler in meinem Code, aber in der Weise, wie die zipfile Bibliothek überprüft, ob das angegebene Passwort korrekt ist. Ich habe es geschafft, die Fehlalarme zu verringern, indem ich die Größe der entschlüsselten Datei überprüfe und wenn sie gleich 0 ist, halte sie für falsch und suche weiter. Aber mein Problem bleibt bestehen, denn wenn die Datei Kauderwelsch enthält, ist die Größe> 0. Also meine Frage ist, gibt es eine Möglichkeit, in Python zu bestimmen, ob eine Datei korrekt entschlüsselt wurde oder ob sie Kauderwelsch enthält?

PS. Ja, ich weiß entschlüsseln Zip-Dateien mit zipfile ist langsam, aber wie ich schon sagte, ich mache dies, um einen Griff von Python zu bekommen.

Hier ist mein Code:

import zipfile 
import os 



zfile=raw_input("Please input zip's file name\n") 
diction=raw_input("Please input dictionary\n") 
found = False 
zipf = zipfile.ZipFile(zfile, 'r') 
f = open(diction, 'r') 

for line in f: 
    pswd = line 
    pswd = pswd[:-1] 
    zipf.setpassword(pswd) 
    try: 
     zipf.extractall() 
     if (os.path.getsize(zfile[:-4]) != 0): 
      found = True 
      break 
    except RuntimeError: 
     continue 
    except Exception: 
     continue 
zipf.close() 

This ist ein Bug-Report i in Python Bug-Tracker submited. Wie Sie sehen, betrachten sie es nicht als einen "Fehler" der Bibliothek, deshalb frage ich nach Alternativen, um zu überprüfen, ob die Datei korrekt entschlüsselt wurde.

PS. Für alle, die sich darum kümmern, haben sie mir in dem obigen Link gesagt, dass es sich um ein Problem des Zip-Dateiformats handelt und dass nichts getan werden kann. Also ich denke, die Frage ist irgendwie beantwortet.

+2

Wenn Sie bestätigen, dass die Python-ZIP-Datei einen Bug hat, müssen Sie dies dem Python-Bug-Tracker melden. – mouad

+1

habe ich schon und was Nathan eingefügt hat ist ihre Antwort. Art von erinnert an "es ist kein Fehler, es ist ein Feature". Deshalb frage ich nach Wegen, um zu überprüfen, ob die entschlüsselte Datei beschädigt ist oder nicht. – Erethon

+0

Gibt es Fälle, in denen ein falsches Passwort keine Ausnahme erzeugt? – jfs

Antwort

3

Von this zipfile Bugreport

„Das Passwort-Überprüfungsschema verwendet eine Ein-Byte-Prüfung gegen die Zip-Header für Konsistenz. es ist also eine (in der Nähe) 1/256 Wahrscheinlichkeit falsch positive, dh Wenn die falschen Passwörter fälschlicherweise als gut erkannt werden, geht die ZipFile-Klasse mit dem Archivieren weiter und das ist der Punkt, an dem die Dinge fehlschlagen (weil der "entschlüsselte" Stream wirklich Junk ist). "

Wird eine Ausnahme ausgelöst? Bitte posten Sie Ihren Code.

+1

Das ist mein Code und mein Fehlerbericht, vielleicht sollte ich ihn an erster Stelle haben. Ich habe ein paar Änderungen am Code vorgenommen, werde meine Frage so schnell wie möglich aktualisieren. – Erethon

+0

Das ist ziemlich seltsam. Es klingt wie ein Fehler, dass in einigen Fällen keine Ausnahme ausgelöst wird. Entweder das oder sie wollen speziell keine Zipfile für Brute-Force-Zipfile-Passwort-Attacken verwenden. – Nathan

+0

Ja, es ist seltsam. In Python 3.1 haben sie sich ein wenig verändert, wie zipfile prüft, ob das Passwort korrekt ist, aber das Problem bleibt bestehen. Rate aus irgendeinem seltsamen Grund, dass sie es so wollen. : / – Erethon

Verwandte Themen