2016-10-15 2 views
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である)Zip​​OutputStreamを使用してパスワードで保護された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は単純に暗号化されていません。

答えて

0

ファイルごとに暗号化フラグを設定するだけです。 (上記の私の編集に加えて)。その後、それは動作します。

注意してください:私だけ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); 
関連する問題