Как создать защищенный паролем Zip-поток, используя TrueVFS (был TrueZIP) ZipOutputStream без keymanager?

#java #zip #truezip #truevfs

#java #zip #truezip #truevfs

Вопрос:

 import net.java.truevfs.comp.zip.ZipOutputStream;

...


ZipOutputStream zos = new ZipOutputStream(outPipe);
zos.setCryptoParameters( ## How to create those Crypto Parameters ### );
 

Криптопараметры должны быть интерфейса. ZipCryptoParameters Класс KeyManagerZipCryptoParameters реализует это, но мне не нужен keymanager, я просто хочу просто жестко закодировать определенный пароль.

Как я могу это сделать?

Редактировать

Я попытался

 private static final class CustomWinZipAesParameters
        implements WinZipAesParameters {
    final byte[] password;

    CustomWinZipAesParameters(final byte[] password) {
        this.password = password.clone();
    }

    @Override
    public byte[] getWritePassword(String name)
            throws ZipKeyException {
        return password.clone();
    }

    @Override
    public byte[] getReadPassword(String name, boolean invalid)
            throws ZipKeyException {
        if (invalid)
            throw new ZipKeyException(name   " (invalid password)");
        return password.clone();
    }

    @Override
    public AesKeyStrength getKeyStrength(String arg0)
            throws ZipKeyException {
        return AesKeyStrength.BITS_128;
    }

    @Override
    public void setKeyStrength(String name, AesKeyStrength keyStrength)
            throws ZipKeyException {
        // We have been using only 128 bits to create archive entries.
        assert AesKeyStrength.BITS_128 == keyStrength;
    }
} // CustomWinZipAesParameters
 

а затем

 byte[] ba = {64, 64, 64, 64, 64};
zos.setCryptoParameters(new CustomWinZipAesParameters(ba));
 

Но полученный ZIP-файл просто не зашифрован.

Ответ №1:

Я просто установил зашифрованный флаг для каждого файла. (в дополнение к моему редактированию выше). Тогда это сработает.

Осторожно: я могу извлечь файл только с 7z помощью — не с unzip помощью команды в Linux (в противном случае я получаю «неподдерживаемый метод сжатия 99»)

 File file = new File(contentManager.getOsmAndFilePlain());

ZipEntry ze = new ZipEntry(ContentManager.PRO_APP_FILENAME);
ze.setEncrypted(true);   ## this line inserted
zos.putNextEntry(ze);