如何在没有密钥管理器的情况下使用 TrueVFS(原为 TrueZip)ZipOutputStream 创建受密码保护的 Zip Stream?
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
。 class 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
命令(否则我会得到 "unsupported compression method 99")
File file = new File(contentManager.getOsmAndFilePlain());
ZipEntry ze = new ZipEntry(ContentManager.PRO_APP_FILENAME);
ze.setEncrypted(true); ## this line inserted
zos.putNextEntry(ze);
import net.java.truevfs.comp.zip.ZipOutputStream;
...
ZipOutputStream zos = new ZipOutputStream(outPipe);
zos.setCryptoParameters( ## How to create those Crypto Parameters ### );
密码参数必须是接口 ZipCryptoParameters
。 class 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
命令(否则我会得到 "unsupported compression method 99")
File file = new File(contentManager.getOsmAndFilePlain());
ZipEntry ze = new ZipEntry(ContentManager.PRO_APP_FILENAME);
ze.setEncrypted(true); ## this line inserted
zos.putNextEntry(ze);