如何使用 java 检查给定的输入流(zip 文件)是否受密码保护?
how to check given inputstream(zip file) is password protected or not using java?
我有 zip 文件的输入流,想检查这个输入流是否受密码保护。我经历了这个 How to use zip4j to extract an zip file with password protection.
String source = "folder/source.zip";
String destination = "folder/source/";
String password = "password";
try {
ZipFile zipFile = new ZipFile(source);
if (zipFile.isEncrypted()) {
zipFile.setPassword(password);
}
zipFile.extractAll(destination);
} catch (ZipException e) {
e.printStackTrace();
}
在本网站上面给出了解决方案。但我没有文件或文件路径位置。我只有 zip 文件的输入流有人可以告诉我如何检查给定的输入流(zip 文件)是否受密码保护。提前致谢。
抱歉,我不认为有一个库可以完全满足您的需求。
zip4j ZipFile
只能打开 File
或 String
路径名。
Java SE ZipFile
只能打开 File
或 String
路径名...并且不支持加密条目。
Java SE ZipInputStream
确实支持 InputStream
,但不支持加密条目。
Apache Commons ZipFile
支持可搜索的输入流(和通道),但不支持 InputStream
。而且它不理解加密条目。
Apache Commons ZipInputStream
适用于任何 InputStream
但它不理解加密条目。
那么有哪些选择呢?
最简单的选择是将 InputStream
内容复制到一个临时文件,然后根据您问题中的代码使用 zip4j ZipFile
。完成后,删除临时文件。
理论上,您应该能够使用 Java SE ZipInputStream
并扫描条目以检查每个文件的 FileHeader
。 (“通用位”字段的第 0 位告诉您文件是否加密。)问题是 ZipEntry
不公开信息。
但是,Apache 的 ZipInputStream
class(可以读取 InputStream
!)公开了通用位字段。因此,这将提供一种方法来测试 ZIP 中的任何文件是否已加密。如果这就是您所需要的,那么您还有另一种可能的选择。
我有 zip 文件的输入流,想检查这个输入流是否受密码保护。我经历了这个 How to use zip4j to extract an zip file with password protection.
String source = "folder/source.zip";
String destination = "folder/source/";
String password = "password";
try {
ZipFile zipFile = new ZipFile(source);
if (zipFile.isEncrypted()) {
zipFile.setPassword(password);
}
zipFile.extractAll(destination);
} catch (ZipException e) {
e.printStackTrace();
}
在本网站上面给出了解决方案。但我没有文件或文件路径位置。我只有 zip 文件的输入流有人可以告诉我如何检查给定的输入流(zip 文件)是否受密码保护。提前致谢。
抱歉,我不认为有一个库可以完全满足您的需求。
zip4j
ZipFile
只能打开File
或String
路径名。Java SE
ZipFile
只能打开File
或String
路径名...并且不支持加密条目。Java SE
ZipInputStream
确实支持InputStream
,但不支持加密条目。Apache Commons
ZipFile
支持可搜索的输入流(和通道),但不支持InputStream
。而且它不理解加密条目。Apache Commons
ZipInputStream
适用于任何InputStream
但它不理解加密条目。
那么有哪些选择呢?
最简单的选择是将 InputStream
内容复制到一个临时文件,然后根据您问题中的代码使用 zip4j ZipFile
。完成后,删除临时文件。
理论上,您应该能够使用 Java SE ZipInputStream
并扫描条目以检查每个文件的 FileHeader
。 (“通用位”字段的第 0 位告诉您文件是否加密。)问题是 ZipEntry
不公开信息。
但是,Apache 的 ZipInputStream
class(可以读取 InputStream
!)公开了通用位字段。因此,这将提供一种方法来测试 ZIP 中的任何文件是否已加密。如果这就是您所需要的,那么您还有另一种可能的选择。