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();
}
}
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. –
Perché hai zippato un file .xlsx? .xlsx è già un file compresso, non otterrai molto! – AxFab
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. –