2012-01-10 4 views
5

Ho una domanda sulla protezione della password di un file Excel.Come proteggere con password un file zip compresso in Java?

La situazione è che, ho un file zip, che ha un file di Excel in esso. Devo scrivere un programma Java, per proteggere con password il file Excel. Quindi, l'utente dovrebbe essere in grado di decomprimere il file (il file zip non deve essere protetto da password). Ma Excel deve essere protetto da password. Quando l'utente tenta di decomprimere il file, dovrebbe essere in grado di farlo. E quando tenta di aprire il file Excel (che si trova all'interno della cartella decompressa), deve chiedere una password. La domanda è simile a Protect excel file with java, con la complessità aggiunta che, il file Excel è zippato.

Ho codice, che password protegge solo il file zip, ma questo non è quello che voglio.

import java.io.File; 
import java.util.ArrayList; 
import net.lingala.zip4j.core.ZipFile; 
import net.lingala.zip4j.exception.ZipException; 
import net.lingala.zip4j.model.ZipParameters; 
import net.lingala.zip4j.util.Zip4jConstants; 

/** 
* Demonstrates adding files to zip file with standard Zip Encryption 
*/ 

public class AddFilesWithStandardZipEncryption 
{ 
    public AddFilesWithStandardZipEncryption() 
    { 
    try { 
      // Initiate ZipFile object with the path/name of the zip file. 
      //ZipFile zipFile = new ZipFile("c:\\ZipTest\\AddFilesWithStandardZipEncryption.zip"); 
      ZipFile zipFile = new ZipFile("C:\\homepage\\workspace\\PasswordProtectedFiles\\new.zip"); 

      // Build the list of files to be added in the array list 
      // Objects of type File have to be added to the ArrayList 
      ArrayList filesToAdd = new ArrayList(); 
      //filesToAdd.add(new File("C:\\homepage\\workspace\\passwordprotectedzipfile\\profile\\profile.txt")); 
      filesToAdd.add(new File("C:\\homepage\\workspace\\PasswordProtectedFiles\\new.xlsx")); 
      //filesToAdd.add(new File("c:\\ZipTest\\myvideo.avi")); 
      //filesToAdd.add(new File("c:\\ZipTest\\mysong.mp3")); 

      // Initiate Zip Parameters which define various properties such 
      // as compression method, etc. 
      ZipParameters parameters = new ZipParameters(); 
      parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); // set compression method to store compression 

      // Set the compression level 
      parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); 

      // Set the encryption flag to true 
      // If this is set to false, then the rest of encryption properties are ignored 
      parameters.setEncryptFiles(true); 

      // Set the encryption method to Standard Zip Encryption 
      parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD); 

      // Set password 
      parameters.setPassword("test123!"); 

      // Now add files to the zip file 
      // Note: To add a single file, the method addFile can be used 
      // Note: If the zip file already exists and if this zip file is a split file 
      // then this method throws an exception as Zip Format Specification does not 
      // allow updating split zip files 
      zipFile.addFiles(filesToAdd, parameters); 
     } 
     catch (ZipException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    public static void main(String[] args) 
    { 
     new AddFilesWithStandardZipEncryption(); 
    } 
} 
+2

ci può essere un modo per aggiungere la protezione con password di un file compresso senza decomprimerlo , ma l'unico modo che conosco per gestirlo è decomprimerlo, quindi ricomprimerlo con la protezione tramite password. Potrebbe essere necessario approfondire la specifica zip per scoprire come viene gestita la protezione della password se è necessario seguire lo standard zip. –

+0

Perché hai zippato un file .xlsx? .xlsx è già un file compresso, non otterrai molto! – AxFab

+0

Non conosco il tuo caso d'uso, ma considera che la protezione di un file zip è sicura, in quanto non aggiungerà solo una "password", ma crittografa l'intera cosa. Considera anche che alcune versioni di Excel sono davvero pericolose: http://www.excelforum.com/excel-programming/503874-how-safe-is-the-excel-password-functionality.html. Se la sicurezza è un problema per te, è meglio stare con crittografia zip. –

risposta

4
  • Usa java.util.zip o zip4j per decomprimere file ai temporaneo direcotry o nella memoria, se sai che è piccola.
  • Quindi utilizzare HSSFWorkbook.writeProtectWorkbook dalla libreria POI di Apache
  • Comprimere nuovamente la cartella di lavoro di Excel.
+0

Sei sicuro che esista un metodo HSSFWorkbook.writeProtectPassword nella libreria POI? Perché non sono riuscito a sapere dove si trovasse. Comunque ho visto 'writeProtect'. – eeerahul

+0

Sorry - writeProtectWorkbook [API] (http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFWorkbook.html) –

1

Penso che dovresti controllare truezip (Truezip website). Fornisce accesso in lettura/scrittura a ZIP, JAR, EAR, WAR ecc e supporta l'accodamento a file ZIP esistenti.

Suggerisco di creare il file zip senza il file excel, creare il file excel password come indicato nel collegamento fornito e quindi utilizzare truezip per scrivere questo file excel nell'archivio. Spero che questo aiuti