2008-08-20 101 views
29

Estoy creando un archivo ZIP con ZipFile en Python 2.5, funciona bien hasta ahora:Crear un archivo ZIP cifrado en Python

import zipfile, os 

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

pero no pudo encontrar la manera de cifrar los archivos en el archivo ZIP . Podría usar el sistema y llamar a PKZIP -s, pero supongo que debe haber una forma más "pitonica". Estoy buscando una solución de código abierto.

+2

solución de código abierto http://stackoverflow.com/questions/2195747/python-code-to-create-a-password-encrypted-zip-file/2366917#2366917 – jfs

Respuesta

0

Puede usar la biblioteca Chilkat. Es comercial, pero tiene una evaluación gratuita y parece bastante agradable.

He aquí un ejemplo que me dieron de 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

Ya vi los ejemplos de Chilkat, pero Estoy buscando una opción de código abierto (lo siento, no lo mencioné en mi publicación original). Sigo buscando en Google, pero sin suerte. – PabloG

13

que crearon una biblioteca sencilla para crear un archivo zip encriptado contraseña en pitón. - here

import pyminizip 

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

La biblioteca requiere zlib.

He comprobado que el archivo se puede extraer en WINDOWS/MAC.

+2

Está disponible a través de pip install pyminizip – shadowbq

+1

No funciona con lo siguiente: Python 3.5 a través de Anaconda (Jupyter Notebook): produjo un archivo zip seguro, pero la contraseña que utilicé para crearlo no abre la carpeta. Hijo de un cachorro! –

3

La pregunta duplicada https://stackoverflow.com/a/2366917/874188 recomienda usar 7z en lugar de zip. Mi experiencia confirma esto.

Copiar/pegar la respuesta por @JFSebastian aquí también está completo:

Para crear archivo zip encriptado (llamado 'myarchive.zip') utilizando código abierto 7-Zip utilidad:

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

Para instalar 7-Zip, tipo:

$ sudo apt-get install p7zip-full 

para descomprimir con la mano (para demostrar la compatibilidad con utitity zip), tipo:

$ unzip myarchive.zip 

Y ingrese P4$$W0rd en el indicador.

o el mismo en Python 2.6+:

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

@ respuesta de tripleee ayudó a mí, veo mi prueba a continuación.

Este código funciona para mí en Python 3.5.2 en Windows 8.1 (7z ruta agregada al sistema).

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

con dos parámetros:

  1. -mx9 medios de compresión máximo
  2. -pSecret^) significa que la contraseña es Secret^). ^ es escape para ) para el sistema operativo Windows, pero cuando descomprima, necesitará escribir el ^.

Sin ^ el sistema operativo Windows no se aplicará la contraseña cuando 7z.exe crear el archivo zip .

Además, si desea utilizar -mhe interruptor, tendrá el formato de archivo para estar en 7z en lugar de postal.

Espero que pueda ayudar.

Cuestiones relacionadas