繁体   English   中英

使用zip4j检查zip文件中的密码更正

[英]check password correction in zip file using zip4j

有没有办法在Java文件中使用zip4j库来检查zip文件中的密码更正而不试图提取zip?

问候

不幸的是,目前版本的Zip4j无法直接实现这一点。 我目前正在重写Zip4j,我将在下一个版本中包含此功能。

但是,对于当前版本,有一个解决方法。 看看下面的代码。 您可以尝试将zip文件读入内存。 对于AES加密的zip文件,您将立即获得ZipException并使用代码ZipExceptionConstants.WRONG_PASSWORD 对于标准zip加密,验证密码并不容易。 如果输入密码错误,Zip4j将抛出CRC异常,这很可能意味着密码错误,但也可能是zip文件中的损坏数据

我知道下面的代码不是一个干净的代码,但不幸的是,这是目前唯一的方法。 Zip4j的下一个版本将包含一个验证密码的简洁功能。

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.exception.ZipExceptionConstants;
import net.lingala.zip4j.model.FileHeader;

public class VerifyPassword {

    public static void verify() {
        try {
            ZipFile zipFile = new ZipFile(new File("myZip.zip"));
            if (zipFile.isEncrypted()) {
                zipFile.setPassword(new char[] {'t', 'e', 's', 't'});
            }
            List<FileHeader> fileHeaders = zipFile.getFileHeaders();

            for(FileHeader fileHeader : fileHeaders) {
                try {
                    InputStream is = zipFile.getInputStream(fileHeader);
                    byte[] b = new byte[4 * 4096];
                    while (is.read(b) != -1) {
                        //Do nothing as we just want to verify password
                    }
                    is.close();
                } catch (ZipException e) {
                    if (e.getCode() == ZipExceptionConstants.WRONG_PASSWORD) {
                        System.out.println("Wrong password");
                    } else {
                        //Corrupt file
                        e.printStackTrace();
                    }
                } catch (IOException e) {
                     System.out.println("Most probably wrong password.");
                     e.printStackTrace();
                }
            }

        } catch (Exception e) {
            System.out.println("Some other exception occurred");
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        verify();
    }

}

暂无
暂无

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

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