Entpacken verschlüsselter zip-Pakete ist fehlerhaft

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
merlinuwe
User
Beiträge: 1
Registriert: Dienstag 23. Oktober 2018, 09:49

Hi,

wenn ich in Python 3.7.2 versuche eine verschlüsselte zip-Datei zu entschlüsseln, ist die Zieldatei leer. Wenn ich z. B. 3 Text-Dateien in ein Paket verschlüssele und dann mit Python versuche, diese Dateien zu entschlüsseln, ist eine dieser Dateien leer.

Gibt es zu ZipFile.extractall vielleicht einen workaround?
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Zeig doch mal exakt den Code, der nicht geht.
Vielleicht liegt das Problem ja in der Anwendung und nicht in der Bibliothek?
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Kann `ZipFile` überhaupt Verschlüsselung?
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@__blackjack__: entpacken ja, packen nein.

AFAIK kann zipfile nur crc32 Verschlüsselung, alles andere nicht. Die Doku schweigt sich leider da aus.

Gruß, noisefloor
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@noisefloor: crc32 ist keine Verschlüsselung sondern ein Prüfsummenverfahren.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@__blackjack__: stimmt. Besser ausgedrückt: zipfile von Python unterstützt nur das Entpacken von Zip-Dateien, wo CRC32 Hashfunktionen verwendet wird. Was, glaube man diversen Quellen im Internet, wohl bei Zip-Dateien, die unter Win erstellt wurde, oft nicht der Fall ist, weil hier andere Verfahren bzw. kryptografisch bessere Funktionen zum Einsatz kommen.

Gruß, noisefloor
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

__blackjack__ hat geschrieben: Samstag 29. Dezember 2018, 16:01 Kann `ZipFile` überhaupt Verschlüsselung?
Nicht wirklich. Mehr als CRC32 passiert da wohl nicht. Tools wie WinZip und 7-Zip nutzen aber AES-Verschlüsselung. Insofern kann das gar nicht funktionieren.

Das Problem ist halt, dass das zipfile-Modul in reinem Python realisiert ist (mit entsprechend mäßiger Performance) und jetzt auch nicht sooo aktiv betreut wird. Der Fokus liegt dabei wohl auch nicht auf einer hundertprozentigen Kompatibilität zu jeglichen ZIP-Archiven, um es mal so auszudrücken.

Ich würde hier eher zu 7-Zip greifen, welches mit dem 7z-Kommando auch recht brauchbar für Shell-Skripte ist. Das gibt es für Linux und Windows und im Gegensatz zu WinZip ist es freie Software. Es bringt einerseits sein eigenes *.7z-Format mit, kommt aber auch sehr gut mit gängigen *.zip-Dateien klar.
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Ich persönlich glaube ja, dass es gar nicht um Verschlüsselung geht. Der Threadstarter schreibt nämlich, dass eine von 3 Textdateien aus dem Archiv leer ist. Das ist alles sehr nerkwürdig.

Es gibt wohl auch einen Nachbau des zipfile-Moduls mit Verschlüsselung: https://github.com/wllm-rbnt/py-zipcrypt
Das Problem scheint also existent zu sein.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@merlinuwe: ZipFile unterstützt nicht alles, was z.B. WinZIP kann, z.B. starke Verschlüsselung mit AES. Da sollte aber dann keine leere Datei entstehen, sondern eine Fehlermeldung erscheinen. Was willst Du eigentlich machen?
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

sparrow hat geschrieben: Sonntag 30. Dezember 2018, 10:22 Ich persönlich glaube ja, dass es gar nicht um Verschlüsselung geht. Der Threadstarter schreibt nämlich, dass eine von 3 Textdateien aus dem Archiv leer ist. Das ist alles sehr nerkwürdig.
Klar ist das merkwürdig. Davon handelt dieser Thread ja. ;P
sparrow hat geschrieben: Sonntag 30. Dezember 2018, 10:22 Es gibt wohl auch einen Nachbau des zipfile-Moduls mit Verschlüsselung: https://github.com/wllm-rbnt/py-zipcrypt
Das Problem scheint also existent zu sein.
Dort versteht man unter "Verschlüsselung" aber wohl auch nur CRC32 (bzw hat es wahrscheinlich so übernommen). Sofern wirklich WinZip zum Verschlüsseln benutzt wurde (der Fragestellung nach passiert es ja außerhalb von Python), dann ist auf jeden Fall AES denkbar. Ich kann mir schon vorstellen, dass an der Stelle das Problem liegt.

Der Code zum Entpacken wäre halt hilfreich. Da das bloß ein paar Aufrufe der zipfile-API sein müssten, dürfte das ja kein großes Geheimnis sein...
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Also ich verstehe immer noch nicht wo das CRC32 hier in die Diskussion kommt, denn es geht um Verschlüsselung. Und die kann `ZipFile` aus der Standardbibliothek a) nur beim Lesen und b) nur die uralte und unsichere Variante von PKWARE die man nicht mehr verwenden sollte. Das `py-zipcrypt`-Modul rüstet dafür auch den schreibenden Teil nach. Den man nicht mehr verwenden sollte. :-)

Bei anderen, sicheren Verschlüsselungsmethoden in ZIP-Dateien sehe ich das Problem, das die Unterstützung dafür von Programm zu Programm/Bibliothek zu Bibliothek unterschiedlich ist, so dass man da ein bisschen vorsichtig sein muss. Frei und recht verbreitet ist wohl nur 7zip, das mit AES-verschlüsselten Archivdateien klar kommt, und das gibt's soweit ich das sehe nur als Programm und nicht als Bibliothek. Da bleibt also nur `subprocess` als Anbindung.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@__blackjack__: weil auf ein paar englischsprachigen Seiten wie z.B. dieser schon mal von "CRC32 encryption" die Rede ist. Was von der Terminologie aber wahrscheinlich auch nicht wirklich korrekt bzw sich so nicht auf's deutsche übertragen lässt.

Gruß, noisefloor
Antworten