1
import net.java.truevfs.comp.zip.ZipOutputStream;
...
ZipOutputStream zos = new ZipOutputStream(outPipe);
zos.setCryptoParameters(## How to create those Crypto Parameters ###);
暗号パラメータは、インターフェイスZipCryptoParameters
である必要があります。クラスKeyManagerZipCryptoParameters
はこれを実装していますが、keymanagerは必要ありません。特定のパスワードを単純にハードコードしたいだけです。keymanagerを使わずにTrueVFSの(TrueZipである)ZipOutputStreamを使用してパスワードで保護されたZipストリームを作成するには?
どうすればいいですか?
編集
私は
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は単純に暗号化されていません。