简体   繁体   English

如何用Java密码保护压缩的Excel文件?

[英]How to password protect a zipped Excel file in Java?

I have a question about password protecting an Excel file. 我有一个密码保护Excel文件的问题。

The situation is that, I have a zip file, that has an Excel file in it. 情况是,我有一个zip文件,其中有一个Excel文件。 I need to write a Java program, to password protect the Excel file. 我需要编写一个Java程序,以密码保护Excel文件。 Hence, the user should be able to unzip the file (the zip file need not be password protected). 因此,用户应该能够解压缩文件(压缩文件不需要密码保护)。 But, the Excel needs to be password-protected. 但是,Excel需要使用密码保护。 When the user tries to unzip the file, he should be able to do so. 当用户尝试解压缩文件时,他应该能够解压缩。 And when he tries to open the Excel file (which is inside the unzipped folder), it must ask for a password. 当他尝试打开Excel文件(位于解压缩的文件夹内)时,它必须要求输入密码。 The question is similar to Protect excel file with java , with the added complexity that, the Excel file is zipped. 问题类似于使用java保护excel文件 ,但增加了压缩Excel文件的复杂性。

I have code, that password protects only the zip file, but this is not what I want. 我有代码,该密码仅保护zip文件,但这不是我想要的。

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();
    }
}

Without uncompressing, Its impossible to password protect excel which is inside a zip file. 如果不解压缩,则无法通过密码保护zip文件中的excel。

Here is what you can do 这是你可以做的

  • Use java.util.zip or zip4j to decompress file to some temp direcotry or to memory, if you know it's small. 如果您知道文件很小,请使用java.util.zip或zip4j将文件解压缩为某些临时目录或内存。
  • Then use HSSFWorkbook.writeProtectWorkbook from Apache POI library 然后使用Apache POI库中的HSSFWorkbook.writeProtectWorkbook
  • Compress Excel workbook again. 再次压缩Excel工作簿。

I think you should check out truezip ( Truezip website ). 我认为您应该查看truezip( Truezip网站 )。 It provides read/write access to ZIP, JAR, EAR, WAR etc and supports appending to existing ZIP files. 它提供对ZIP,JAR,EAR,WAR等的读/写访问权限,并支持附加到现有的ZIP文件。

I suggest you create your zip file without the excel file in it, create your passworded excel file as directed in the link you provided and then use truezip to write this excel file to the archive. 建议您创建不包含excel文件的zip文件,按照您提供的链接中的说明创建密码的excel文件,然后使用truezip将此excel文件写入存档。 Hope this helps 希望这可以帮助

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM