Hier ist die ZIP-Datei-Spezifikation:
Flags General purpose bit flag:
Bit 00: encrypted file
Bit 01: compression option
Bit 02: compression option
Bit 03: data descriptor
Bit 04: enhanced deflation
Bit 05: compressed patched data
Bit 06: strong encryption
Bit 07-10: unused
Bit 11: language encoding
Bit 12: reserved
Bit 13: mask header values
Bit 14-15: reserved
So ein GPBF Wert von 9 hat sowohl die "verschlüsselte Datei" und "Daten-Descriptor" gesetzt Bits.
Ein Blick auf die Android-Quellcode hier: https://chromium.googlesource.com/android_tools/+/9e9b6169a098bc19986e44fbbf65e4c29031e4bd/sdk/sources/android-22/java/util/zip/ZipFile.java (eine ältere Version, aber ich vermute, das hat sich nicht geändert) zeigt dies:
static final int GPBF_ENCRYPTED_FLAG = 1 << 0;
[...]
/**
* Supported General Purpose Bit Flags Mask.
* Bit mask of bits not supported.
* Note: The only bit that we will enforce at this time
* is the encrypted bit. Although other bits are not supported,
* we must not enforce them as this could break some legitimate
* use cases (See http://b/8617715).
*/
static final int GPBF_UNSUPPORTED_MASK = GPBF_ENCRYPTED_FLAG;
[...]
// At position 6 we find the General Purpose Bit Flag.
int gpbf = Short.reverseBytes(is.readShort()) & 0xffff;
if ((gpbf & ZipFile.GPBF_UNSUPPORTED_MASK) != 0) {
throw new ZipException("Invalid General Purpose Bit Flag: " + gpbf);
}
Also, Ihre ZIP-Datei cl zielt darauf ab, die Datei verschlüsselt zu haben (Bit 00 des GPBF ist gesetzt), und die ZipFile-Implementierung unterstützt das Lesen von verschlüsselten Dateien nicht.
Ok, Sie sagen also, dass eine bestimmte Datei verschlüsselt wurde und sie nicht lesen konnte? –
Ja, so sieht es für mich aus. Haben Sie versucht (a) die gleiche Datei mit einem anderen Dienstprogramm zu entpacken und/oder (b) eine bekanntermaßen gute (unverschlüsselte) Datei mit Ihrem Code zu entpacken? –