Python 3.7 Zip File mit Passwort extrahieren?

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.
Paigner
User
Beiträge: 10
Registriert: Montag 31. Dezember 2018, 14:37

Ich habe diesen Code in meinem Script:

Code: Alles auswählen

from zipfile import ZipFile

password = 'abc'
zip = zipfile.ZipFile('test.zip')
zip.extractall(pwd=bytes(password,'utf-8'))
#zip.close()
Und wenn ich ihn ausführe erscheint das:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\User\Paigner\Documents\Python\Test.py", line 5, in <module>
    zip.extractall(pwd=bytes(password,'utf-8'))
  File "C:\Program Files (x86)\Python37-32\lib\zipfile.py", line 1594, in extractall
    self._extract_member(zipinfo, path, pwd)
  File "C:\Program Files (x86)\Python37-32\lib\zipfile.py", line 1647, in _extract_member
    with self.open(member, pwd=pwd) as source, \
  File "C:\Program Files (x86)\Python37-32\lib\zipfile.py", line 1516, in open
    raise RuntimeError("Bad password for file %r" % name)
RuntimeError: Bad password for file <ZipInfo filename='test.txt' compress_type=99 external_attr=0x20 file_size=0 compress_size=28>
Ich habe das zip.close() ausgeklammert weil das eh nicht ausgeführt wird.

Bin leider mit meinem Latein am Ende :/
Kann mir jemand helfen?

PS meine Zip Datei habe ich mit Winrar gezipt--Falls das was ausmacht :)
Benutzeravatar
__blackjack__
User
Beiträge: 14036
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das Netz behauptet das WinZip Passwörter als CP1252 kodiert. Vielleicht das mal probieren?

Warum verschlüsselst Du denn? Die PKWARE-Verschlüsselung die das `zipfile`-Modul entschlüsseln kann ist uralt und gilt als unsicher.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Benutzeravatar
snafu
User
Beiträge: 6865
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Oder zum Entschlüsseln einfach das selbe Programm nehmen (hier: WinRAR). Das ist wie bei anderen Dateitypen: Ich kann auch nicht erwarten, dass mein MS Word Dokument mit Spezial-Features garantiert genau so auch in LibreOffice angezeigt wird. Für ZIP-Dateien gibt es keine festen Standards. Wenn es über einfache Operationen hinausgeht, dann kann sich jedes Programm anders verhalten bzw fehlerhaft arbeiten.
Benutzeravatar
__blackjack__
User
Beiträge: 14036
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@snafu: Naja, im Grunde gibt es schon einen Standard. Das Problem dabei ist eher das der vorsieht das Anbieter da Erweiterungen einbauen können, und die das halt auch machen. Aber nicht jeder Anbieter verarbeitet auch die Erweiterungen der anderen. Plus eventuelle Fehler beim erstellen oder auspacken in den einzelnen Anwendungen/Bibliotheken.

Plattformübergreifend und sowohl frei als auch kostenlos verfügbar und mit guter Kompression und sicherer Verschlüsselung ist 7zip.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Sirius3
User
Beiträge: 18268
Registriert: Sonntag 21. Oktober 2012, 17:20

@Paigner: Die Meldung sagt, dass compress_type=99 ist, das bedeutet, dass WinRar mit AES verschlüsselt hat, das kann zipfile aber nicht. Die beste Methode ist wohl, auf ein externes Programm auszuweichen.
Paigner
User
Beiträge: 10
Registriert: Montag 31. Dezember 2018, 14:37

__blackjack__ hat geschrieben: Montag 31. Dezember 2018, 16:03 Das Netz behauptet das WinZip Passwörter als CP1252 kodiert. Vielleicht das mal probieren?
Und wie geht das :)
Bin noch ein "realativer" Neuling in Python
Paigner
User
Beiträge: 10
Registriert: Montag 31. Dezember 2018, 14:37

Sirius3 hat geschrieben: Dienstag 1. Januar 2019, 01:22 @Paigner: Die Meldung sagt, dass compress_type=99 ist, das bedeutet, dass WinRar mit AES verschlüsselt hat, das kann zipfile aber nicht. Die beste Methode ist wohl, auf ein externes Programm auszuweichen.
Meine Idee war es eigtl ein Programm zu programmieren das eine beliebige *.zip datei entschlüsselt, und wenn sie Passwort geschützt ist, dass das Programm nach dem Passwort fragt und die Datei dann trotzdem Extrahiert.

Gibt es da eine Möglichkeit?
(Also sowohl WinRar.zip Datein als auch 7zip zu extrahieren?
Paigner
User
Beiträge: 10
Registriert: Montag 31. Dezember 2018, 14:37

Danke für eure Antworten :)
Paigner
User
Beiträge: 10
Registriert: Montag 31. Dezember 2018, 14:37

Sirius3 hat geschrieben: Dienstag 1. Januar 2019, 01:22 @Paigner: Die Meldung sagt, dass compress_type=99 ist, das bedeutet, dass WinRar mit AES verschlüsselt hat, das kann zipfile aber nicht. Die beste Methode ist wohl, auf ein externes Programm auszuweichen.
Wieso geht es dann aber wenn die WinRar.zip Datei ohne Passwort geschütz ist?
(mit dem gleichen Code nur pwd=None)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Weil die Verschlüsselung der Teil ist, der den Unterschied macht. Das ist nicht standardisiert.
Paigner
User
Beiträge: 10
Registriert: Montag 31. Dezember 2018, 14:37

__deets__ hat geschrieben: Dienstag 1. Januar 2019, 11:09 Weil die Verschlüsselung der Teil ist, der den Unterschied macht. Das ist nicht standardisiert.
Und wie kann ich das Problem dann Lösen?
Paigner
User
Beiträge: 10
Registriert: Montag 31. Dezember 2018, 14:37

Noch mal kleines Update:
Wenn ich die Datei mit 7zip "zippe" dann funktioniert alles ohne Probleme! :)
Allerding wie bekomme ich es hin, dass auch WinRar dateien klappen?
Hat da vielleicht jemand eine Idee?
Benutzeravatar
noisefloor
User
Beiträge: 4187
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Allerding wie bekomme ich es hin, dass auch WinRar dateien klappen?
Gar nicht bzw. nur dann, wenn du sicherstellst, dass die mit WinRAR gezippte Datei so verschlüsselt ist, dass das Modul als der Standardbibliothek das entschlüsseln kann. Hier ist die Funktionalität von zipfile aber sehr dünn. Dazu gab es kürzlich schon mal einen Thread: Link.

Ggf. müsstest du halt auf ein externes Modul ausweichen, dass mehr Verschlüsselungsarten kann.

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

@Paigner: Wenn Du mit 7zip und verschlüsselt packst und das `zipfile`-Modul das tatsächlich lesen kann, dann hast Du die uralte, unsichere Verschlüsselung gewählt. Die sollte man nicht mehr verwenden.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Paigner
User
Beiträge: 10
Registriert: Montag 31. Dezember 2018, 14:37

noisefloor hat geschrieben: Dienstag 1. Januar 2019, 12:04
Ggf. müsstest du halt auf ein externes Modul ausweichen, dass mehr Verschlüsselungsarten kann.
Kennt jemand eines das die neue "AES-256" kodierung unterstützt?


Danke für eure Antworten und Aktivität :)
Benutzeravatar
__blackjack__
User
Beiträge: 14036
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Paigner: Das war jetzt nicht wirklich so schwer zu finden: https://pypi.org/project/pyzipper/
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Paigner
User
Beiträge: 10
Registriert: Montag 31. Dezember 2018, 14:37

Danke :)))

Hat jemand nch eine Idee wie ich überprüfen kann welche Methode das Programm anwenden soll?
Benutzeravatar
__blackjack__
User
Beiträge: 14036
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Paigner: Sorry, ich verstehe die Frage nicht‽
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1236
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Vielleicht meint er damit die Art der nicht standardisierten AES Verschlüsselung vs. standardisierten Passwortschutz?
Naive Lösung: Eine Funktion, die zuerst die das eine Modul verwendet und wenn das eine Exeception wirft, dass das Modul aus der Standardbibliothek verwenden.
Das dürfte nicht so schwer sein.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
__blackjack__
User
Beiträge: 14036
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Naive Lösung wäre einfach korrekterweise anzunehmen, dass der Autor von `pyzipper` seine Klassen von denen aus dem `zipfile`-Modul abgeleitet hat und man deshalb keine Unterscheidung beim entpacken braucht. :-)
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Antworten