Colocar senha em arquivo compactado

Após compactar um arquivo para o formato .zip, preciso que o mesmo esteja protegido por senha.
Como inserir senha no arquivo???


public class CompactarZip{
    public void compactador(String local,String nome ){

    // nome do arquivo que será compactado
    String arquivo = local+ "\\" +nome;
    
    // Cria um buffer para ler os dados do arquivo
    byte[] buf = new byte[1024];
    
    try{
      // Cria o arquivo zip
      String compac = local+ "\\" +nome+".zip";
      ZipOutputStream out = new ZipOutputStream(new
        FileOutputStream(compac));
    
      // Comprime o arquivo
      FileInputStream in = new FileInputStream(arquivo);
    
      // Adiciona o arquivo ao fluxo de saída
      out.putNextEntry(new ZipEntry(arquivo));
    
      // transfere dados do arquivo para o arquivo zip
      int len;
      while((len = in.read(buf)) > 0){
        out.write(buf, 0, len);
      }
    
      // Finaliza a entrada
      out.closeEntry();
      in.close();
    
      // Completa o arquivo zip
      out.close();
      System.out.println("Sucesso");
    }
    catch(IOException e){
      // possíveis erros aqui
    } finally{
    	
    }
  }
}

Um arquivo ZIP com senha é um arquivo criptografado com um algoritmo especial (que é muito fraco e foi quebrado, por força bruta, faz muito tempo atrás) ou então AES. Não é só “botar uma senha no arquivo”. Portanto, você precisa procurar na Internet uma classe que faça isso.

Tem algum site conhecido para indicar como referência??
Obrigado.

acho que aqui tem o vc precisa… :slight_smile:

http://www.guj.com.br/java/23799-gerar-arquivo-zip-com-senha

abs!!

Pesquisando encontrei sobre o bouncycastle.org

Alguem tem um exemplo de como criptografo um arquivo com ele??

Encontrei exemplo de como descriptografar apenas…


/** testcode + usage example */
        public static void main( String[] args ) throws Exception {
        //LogManager.getLogManager().readConfiguration( new FileInputStream("logging.properties") );
                AesZipFileDecrypter zipFile = new AesZipFileDecrypter( new File("C:\\Users\\candidatos.xml.zip"), new AESDecrypterBC() );
                ExtZipEntry entry = zipFile.getEntry( "C:\\Users\\candidatos.xml" );
                zipFile.extractEntryWithTmpFile( entry, new File("C:\\Users\\candidatos.xml.zip"), "foo" );
        }

Valeu…

Um arquivo criptografado com esse método que você mostrou não pode ser aberto (nem com senha) em nenhum programa que abra arquivos .zip, como o WinZip ou o BraZip ou o zip.exe. Isso é porque ele criptografa tudo, incluindo a estrutura do arquivo zip, que deve sempre ficar “aberta”. O formato ZIP criptografa apenas o conteúdo, não a estrutura (ou seja, a listagem de diretórios e arquivos).

Você precisa criar o arquivo criptografado exatamente como na especificação do formato ZIP. E isso não é trivial.