[英]How to open password protected zip file using truezip library in java
[英]How to create a password protected Zip Stream using TrueVFS's (was TrueZip) ZipOutputStream without keymanager?
import net.java.truevfs.comp.zip.ZipOutputStream;
...
ZipOutputStream zos = new ZipOutputStream(outPipe);
zos.setCryptoParameters( ## How to create those Crypto Parameters ### );
密码参数必须是ZipCryptoParameters
接口。 KeyManagerZipCryptoParameters
类正在实现这一点 - 但我不想要一个密钥管理器,我只想简单地硬编码一个特定的密码。
我怎样才能做到这一点?
编辑
我试过了
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 根本没有加密。
我只是为每个文件设置加密标志。 (除了我上面的编辑)。 然后它工作。
当心:我只能用7z
解压文件——不能用 Linux 上的unzip
命令解压(否则我会得到“不支持的压缩方法 99”)
File file = new File(contentManager.getOsmAndFilePlain());
ZipEntry ze = new ZipEntry(ContentManager.PRO_APP_FILENAME);
ze.setEncrypted(true); ## this line inserted
zos.putNextEntry(ze);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.