首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用zip4j检查zip文件中的密码更正

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

Stack Overflow用户
提问于 2013-10-08 09:38:06
回答 1查看 4.2K关注 0票数 2

是否有任何方法可以在不试图解压的情况下使用zip4j库检查zip文件中的密码更正?

问候

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-08 11:19:19

不幸的是,在当前版本的Zip4j中,这是不可能的。我目前正在重写Zip4j,我将在下一个版本中包含这个特性。

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

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

代码语言:javascript
复制
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();
    }

}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19244137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档