2008-08-20 12 views
29

tworzę plik ZIP z ZipFile w Pythonie 2.5, to działa ok do tej pory:Stwórz zaszyfrowany plik ZIP w Pythonie

import zipfile, os 

locfile = "test.txt" 
loczip = os.path.splitext (locfile)[0] + ".zip" 
zip = zipfile.ZipFile (loczip, "w") 
zip.write (locfile) 
zip.close() 

ale nie mogłem znaleźć sposób, aby zaszyfrować pliki w formacie ZIP . Mogę użyć systemu i zadzwonić do PKZIP -s, ale przypuszczam, że musi być bardziej "Pythoniczny" sposób. Szukam rozwiązania open source.

+2

rozwiązanie open source http://stackoverflow.com/questions/2195747/python-code-to-create-a-password-encrypted-zip-file/2366917#2366917 – jfs

Odpowiedz

0

Można użyć biblioteki Chilkat. Jest komercyjny, ale ma bezpłatną ocenę i wydaje się całkiem niezły.

Oto przykład dostałem od here:

import chilkat 

# Demonstrates how to create a WinZip-compatible 128-bit AES strong encrypted zip 
zip = chilkat.CkZip() 
zip.UnlockComponent("anything for 30-day trial") 

zip.NewZip("strongEncrypted.zip") 

# Set the Encryption property = 4, which indicates WinZip compatible AES encryption. 
zip.put_Encryption(4) 
# The key length can be 128, 192, or 256. 
zip.put_EncryptKeyLength(128) 
zip.SetPassword("secret") 

zip.AppendFiles("exampleData/*",True) 
zip.WriteZip() 
+0

Już widziałem przykłady Chilkat, ale ja "Szukam opcji open source (przykro mi, nie wspomniałem o tym w moim oryginalnym wpisie) wciąż szukam w google, ale bez szczęścia. – PabloG

13

Stworzyłem prostą bibliotekę, aby utworzyć zaszyfrowany hasłem pliku zip w Pythonie. - here

import pyminizip 

compression_level = 5 # 1-9 
pyminizip.compress("src.txt", "dst.zip", "password", compression_level) 

Biblioteka wymaga zlib.

Sprawdziłem, czy plik można rozpakować w WINDOWS/MAC.

+2

Jest on dostępny poprzez instalację pipową pyminizip – shadowbq

+1

Nie działa z następującymi elementami: Python 3.5 przez Anaconię (notatnik Jupyter): wygenerował bezpieczny plik zip, ale hasło, którego użyłem do jego utworzenia, nie otwiera folderu! Syn szczeniaka! –

3

Duplikat pytania https://stackoverflow.com/a/2366917/874188 zaleca używanie 7z zamiast zip. Moje doświadczenie to potwierdza.

kopiowania/wklejania odpowiedź przez @JFSebastian tutaj zbyt dla kompletności:

tworzenie zaszyfrowanych archiwów zip (o nazwie 'myarchive.zip') używając open source 7-Zip użytkowy:

rc = subprocess.call(['7z', 'a', '-pP4$$W0rd', '-y', 'myarchive.zip'] + 
        ['first_file.txt', 'second.file']) 

Aby zainstalować 7-Zip, Typ:

$ sudo apt-get install p7zip-full 

aby rozpakować ręcznie (w celu wykazania zgodności z zip utitity), typ:

$ unzip myarchive.zip 

Po znaku zachęty wpisz P4$$W0rd.

lub takie same w Pythonie 2.6+:

>>> zipfile.ZipFile('myarchive.zip').extractall(pwd='P4$$W0rd') 
-1

@ odpowiedź tripleee pomógł mi znaleźć mój test poniżej.

Ten kod działa dla mnie na python 3.5.2 na Windows 8.1 (7z ścieżka dodana do systemu).

rc = subprocess.call(['7z', 'a', output_filename + '.zip', '-mx9', '-pSecret^)'] + [src_folder + '/']) 

z dwoma parametrami:

  1. -mx9 oznacza max uciskanie
  2. -pSecret^) oznacza hasło jest Secret^). ^ jest ucieczką dla ) dla systemu operacyjnego Windows, ale po rozpakowaniu konieczne będzie wpisanie nazwy ^.

Bez ^ systemu operacyjnego Windows nie będzie stosować hasła podczas 7z.exe tworzenia pliku zip .

Ponadto, jeśli chcesz używać -mhe przełącznika, trzeba format pliku będzie w 7z zamiast zip.

Mam nadzieję, że to może pomóc.

Powiązane problemy