gpt4 book ai didi

java - 如何检查 JAR 文件是否有效?

转载 作者:搜寻专家 更新时间:2023-10-30 21:31:06 25 4
gpt4 key购买 nike

我的网络应用程序允许用户上传 JAR 文件。但是,上传 jar 文件后,它已损坏。我已经通过比较上传文件前后的 MD5 校验和验证了这一点 (winmd5free)。

上传的jar文件和原来的几乎一模一样:

  • 与原始文件相比,文件大小相似(在 KB 级别)
  • 我可以使用解压程序打开上传的 jar 文件并查看它的内容(资源和类文件),与原始文件相比一切都是一样的

当我打开上传的 jar 文件(使用 Notepad++)时,我确实注意到二进制内容与原始内容不同。此外,当我使用 JarInputStream 读取 JAR 条目时,没有任何条目。

JarInputStream is = new JarInputStream(new FileInputStream(new File("uploaded.jar")));
JarEntry entry = null;
while(null != (entry = is.getNextJarEntry())) {
System.out.println(entry.getName());
}

此外,当我双击 jar (Windows) 时,我收到以下消息。

Error: Invalid or corrupt jarfile

我的问题是:

  • 有没有办法以编程方式检查 jar 文件是否有效?我原以为 JarInputStream 会立即检测到这一点,但它没有显示任何问题
  • 当我双击 jar 文件时,在 Windows 中,是 java.exe 给我“无效或损坏的 JAR 文件”消息吗?
  • 当一个无效的 jar 文件作为类路径的一部分传入时,为什么没有抛出错误/异常?例如,通过运行 java -cp uploaded.jar;libs\* com.some.class.Test 命令?

这个问题与 jar 签名和/或检查 JAR 文件的签名无关。它只是检查文件(上传与否)是否是有效的 JAR 文件(不一定是 jar 的类文件是否有效,因为已经有关于此问题的另一篇 SO 帖子)。

我运行 jar -tvf uploaded.jar 的结果:

java.util.zip.ZipException: error in opening zip file
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:127)
at java.util.zip.ZipFile.<init>(ZipFile.java:88)
at sun.tools.jar.Main.list(Main.java:977)
at sun.tools.jar.Main.run(Main.java:222)
at sun.tools.jar.Main.main(Main.java:1147)

最佳答案

以编程方式检测无效 jar 文件的一种方法是使用 java.util.ZipFile

public static void main(String[] args) {
if(args.length < 1) {
System.err.println("need jar file");
return;
}

String pathname = args[0];
try {
ZipFile file = new ZipFile(new File(pathname));
Enumeration<? extends ZipEntry> e = file.entries();
while(e.hasMoreElements()) {
ZipEntry entry = e.nextElement();
System.out.println(entry.getName());
}
} catch(Exception ex) {
ex.printStackTrace();
}
}

如果 jar 文件无效,则在实例化 ZipFile 对象时将抛出 ZipException

关于java - 如何检查 JAR 文件是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20152195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com