Domanda

Devo comprimere e proteggere con password un file. C'è una buona libreria (gratuita) per questo?

Questo deve essere aperto da una terza parte, quindi la protezione con password deve funzionare con strumenti standard.

È stato utile?

Soluzione

Dopo molte ricerche, ho trovato tre approcci:

Un set di codice sorgente disponibile gratuitamente, adatto per un singolo file zip. Tuttavia, non esiste una licenza. L'utilizzo è AesZipOutputStream.zipAndEcrypt (...). http://merkert.de/de/info/zipaes/src.zip ( https://forums.oracle.com/forums/thread.jspa?threadID= 1526137 )

AGGIORNAMENTO: questo codice è ora concesso in licenza Apache e rilasciato all'indirizzo http://code.google.com/ p / winzipaes / . Ha funzionato per me (un file nello zip) e riempie bene un buco nelle librerie dei sorgenti di Java.

Un prodotto commerciale ($ 500 al momento della scrittura). Non riesco a verificare se funziona, poiché il loro approccio alla licenza di prova è complesso. È anche un'app .NET con port: http://www.nsoftware.com/ipworks/zip/default.aspx

Un prodotto commerciale ($ 290 al momento della scrittura). Adatto solo per Wnidows in quanto utilizza una dll: http://www.example-code.com/java/zip.asp

Altri suggerimenti

Puoi provare Zip4j , una libreria java pura per gestire il file zip. Supporta la crittografia / decrittografia dei metodi di crittografia PKWare e AES.

Caratteristiche principali:

  • Crea, Aggiungi, Estrai, Aggiorna, Rimuovi file da un file Zip
  • Lettura / scrittura di file zip protetti da password
  • Supporta la crittografia AES 128/256
  • Supporta la crittografia Zip standard
  • Supporta il formato Zip64
  • Supporta il metodo di compressione Store (No Compression) e Deflate
  • Crea o estrai file da file Zip divisi (es: z01, z02, ... zip)
  • Supporta i nomi di file Unicode
  • Monitoraggio progressi

Licenza:

Questa non è una risposta, ma è una precauzione da tenere presente quando si valutano potenziali soluzioni.

Una cosa molto importante sulla crittografia zip:

Esistono diversi tipi di crittografia zip. Il vecchio tipo (parte dello standard zip originale) non merita assolutamente di essere disturbato (può essere crackato in meno di 10 minuti con app facilmente disponibili online).

Se stai eseguendo qualsiasi tipo di crittografia dei file zip, per favore, assicurati di utilizzare uno dei forti standard di crittografia (credo che lo standard AES a 128 e 256 bit di WinZip sia il migliore supportato). Ecco le specifiche tecniche - l'abbiamo usato durante lo sviluppo del nostro sistema zip crittografato Java (impossibile fornire fonte - scusa - è solo per uso interno)

L'unica cosa peggiore di non avere la crittografia è pensare di avere la crittografia e di avere torto :-)

7-Zip ha la possibilità di aggiungere una password nella sua modalità da riga di comando. Forse puoi eseguirlo per ottenere questo risultato (e ha anche una buona razione di compressione).

Svantaggi: processo esterno, difficile da rendere portatile (anche se 7-Zip è portatile stesso), non sicuro della licenza di distribuzione.

Nota che l'utilità Zip di InfoZip, anch'essa altamente portatile, supporta anche la password.

Puoi anche provare TrueZip. Vedere i collegamenti seguenti per le funzionalità: https://christian-schlichtherle.bitbucket.io/truezip/

Il successore di TrueZip è disponibile qui: https://christian-schlichtherle.bitbucket.io/truevfs/

Ecco un esempio usando winzipaes 1.0.1. Nota che questo è solo un esempio, non ho testato questo codice esattamente in questo modulo.

import de.idyl.winzipaes.AesZipFileEncrypter;
import de.idyl.winzipaes.impl.AESEncrypterBC;

File aNewZipFile = new File("/tmp/foo.zip");
File existingUnzippedFile = new File("/tmp/src.txt");

// We use the bouncy castle encrypter, as opposed to the JCA encrypter
AESEncrypterBC encrypter = new AESEncrypterBC();
encrypter.init("my-password", 0);  // The 0 is keySize, it is ignored for AESEncrypterBC

AesZipFileEncrypter zipEncrypter = new AesZipFileEncrypter(aNewZipFile, encrypter);
zipEncrypter.add(existingUnzippedFile, "src.txt", "my-password"); 

// remember to close the zipEncrypter
zipEncrypter.close();

Puoi decomprimere " /tmp/foo.zip" usando Winzip (v9 +) o 7za (cioè 7zip) su un Mac, usando password "quot-my-password".

Nota: non mi è chiaro il motivo per cui è necessario specificare due volte la password nel codice sopra. Non so cosa succederebbe se si usassero password diverse in questi due posti.

Se offri uno scenario di utilizzo migliore, allora ci sono altre alternative.

  1. È necessario che zip sia aperto dagli strumenti Zip standard in grado di gestire una password zip?
  2. La stessa domanda della precedente hai intenzione di passare questo zip a un'entità esterna che deve aprire lo zip?
  3. È solo interno e vuoi solo proteggere il contenuto della zip?

Per 3, allora puoi semplicemente usare java per crittografare il contenuto dello stream della zip come un normale file, probabilmente è meglio cambiare l'estensione del file in .ezip o anche in altro.

Per 1 e 2, puoi utilizzare la soluzione chillkat come menzionato, oppure un equivalente. Tuttavia, tieni presente che chillkat non è una soluzione Java pura, utilizza JNI.

Informazioni aggiuntive: ho cercato su Google un po 'di più e in effetti, è una domanda abbastanza comune e sembra che non ci sia soluzione gratuita (ancora?).

Ora, l'algoritmo standard di crittografia Zip è ben definito: vedi Nota applicativa sul formato file .ZIP. Sembra essere una crittografia eseguita sul flusso crittografato. Se qualcuno ha voglia di codificarlo ...

Ora, mi chiedo perché Sun non l'abbia incluso nella sua libreria? Mancanza di standard? Brevetto / problema legale? Troppo debole per essere utilizzabile?

  

Esiste una buona libreria (gratuita) per questo?

java.util.zip eseguirà la compressione, ma non le password. E no, non ne conosco altri gratuiti. Il più economico che ho visto è $ 150 per un posto per sviluppatore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top