Recomendações sobre uma biblioteca livre para ser usado para zipar arquivos [fechado]

StackOverflow https://stackoverflow.com/questions/166340

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu preciso compactar e proteger por senha um arquivo. Existe uma boa (gratuito) biblioteca para isso?

Isso precisa ser aberto por um terceiro, de modo que as necessidades de proteção de senha para trabalhar com ferramentas padrão.

Foi útil?

Solução

Depois de muito procurar, eu encontrei três abordagens:

Um conjunto livremente disponível do código-fonte, adequado para um único arquivo zip. No entanto, não há nenhuma licença. O uso é AesZipOutputStream.zipAndEcrypt (...). http://merkert.de/de/info/zipaes/src.zip ( https://forums.oracle.com/forums/thread.jspa?threadID= 1526137 )

UPDATE: Este código é agora Apache licenciado e lançado em http://code.google.com/ p / winzipaes / . Ela trabalhou para mim (um arquivo no zip), e preenche um buraco em Java do abre bibliotecas de código bem.

Um produto comercial ($ 500 no momento da escrita). Eu não posso verificar se isso funciona, como sua abordagem licença de avaliação é complexa. Seu também um aplicativo .NET portado: http://www.nsoftware.com/ipworks/zip/default.aspx

Um produto comercial ($ 290 no momento da escrita). Adequado apenas para Wnidows uma vez que utiliza uma dll: http://www.example-code.com/java/zip.asp

Outras dicas

Você pode tentar Zip4j , uma biblioteca java puro para lidar com zip arquivo. Ele suporta encriptação / desencriptação de PKWARE e AES métodos de criptografia.

Principais características:

  • Criar, Adicionar, Extract, Update, remover arquivos de um arquivo Zip
  • Read / Write password protegida Zip arquivos
  • oferece suporte a AES 128/256 Criptografia
  • Suporta padrão Zip Criptografia
  • suporta o formato Zip64
  • Suporta Store (sem compressão) e método de compressão Deflate
  • Criar ou extrair arquivos de Split Zip arquivos (Ex: z01, Z02, ... ZIP)
  • suporta nomes de arquivo Unicode
  • Progress monitor

Licença:

Esta não é uma resposta, mas é uma precaução para manter em mente ao avaliar as possíveis soluções.

Uma coisa muito importante sobre criptografia zip:

Existem vários tipos de criptografia zip. O tipo antigo (parte do padrão zip original) não é de todo a pena incomodar-se com (ele pode ser quebrado em menos de 10 minutos com aplicativos facilmente disponível on-line).

Se você estiver fazendo qualquer tipo de criptografia de arquivos zip, por favor, por favor, certifique-se de usar um dos fortes padrões de criptografia (eu acredito que esse padrão AES 128 e 256-bit do WinZip é a melhor suportado). Aqui estão as especificações técnicas - usamos isso quando desenvolver a nossa própria Java criptografado zip sistema (não pode fornecer fonte - desculpe - é o uso interno)

A única coisa pior do que não ter criptografia é pensar que você tem criptografia e estar errado: -)

7-Zip tem a opção de adicionar uma senha em seu modo de linha de comando. Talvez você pode exec-lo para obter este resultado (e tem uma ração boa compressão também).

Desvantagens:. Processo externo, difícil fazer portátil (mesmo que 7-Zip é portátil em si), não tenho certeza de licença de distribuição

Note que o utilitário Zip do InfoZip, altamente portátil também, também suporta senha.

Você também pode tentar TrueZip. Veja os seguintes links para recursos: https://christian-schlichtherle.bitbucket.io/truezip/

O sucessor de TrueZip pode ser encontrada aqui: https://christian-schlichtherle.bitbucket.io/truevfs/

Aqui está um exemplo usando winzipaes 1.0.1. Note que este é apenas uma essência, eu não testei este código exatamente desta forma.

import de.idyl.winzipaes.AesZipFileEncrypter;
import de.idyl.winzipaes.impl.AESEncrypterBC;

File aNewZipFile = new File("/tmp/foo.zip");
File existingUnzippedFile = new File("/tmp/src.txt");

// We use the bouncy castle encrypter, as opposed to the JCA encrypter
AESEncrypterBC encrypter = new AESEncrypterBC();
encrypter.init("my-password", 0);  // The 0 is keySize, it is ignored for AESEncrypterBC

AesZipFileEncrypter zipEncrypter = new AesZipFileEncrypter(aNewZipFile, encrypter);
zipEncrypter.add(existingUnzippedFile, "src.txt", "my-password"); 

// remember to close the zipEncrypter
zipEncrypter.close();

Você pode lhes descompactar "/tmp/foo.zip" usando Winzip (v9 +) ou 7za (ou seja, 7zip) em um Mac, usando a senha "minha-senha".

Nota: não está claro para mim por que é necessário especificar a senha duas vezes no código acima. Eu não sei o que aconteceria se você usou senhas diferentes nesses dois lugares.

Se você der um cenário de uso melhor, então há outras alternativas.

  1. Você precisa do zip para ser aberto pelas ferramentas Zip padrão que podem lidar com uma senha zip?
  2. A mesma pergunta como anterior é que você vai passar este zip a uma entidade externa que tem que abrir o zip?
  3. É apenas interna e você só quer proteger o conteúdo do zip?

Para 3, em seguida, você pode apenas usar java para criptografar o conteúdo de fluxo do zip como um arquivo normal, provavelmente o melhor para mudar a extensão do arquivo para .ezip ou algo assim também.

Para 1 e 2, então você pode usar a solução chillkat como mencionado, ou um equivalente. No entanto estar ciente de que chillkat não é uma solução Java puro, ele usa JNI.

Informações adicionais: Eu pesquisei um pouco mais e, na verdade, é uma questão bastante comum, e parece que não há nenhuma solução livre

(ainda?).

Agora, o algoritmo padrão de criptografia Zip é bem definida: = rel = "nofollow noreferrer" título "http://www.pkware.com/support/zip-application-note" = "aplicação Ver PKWARE de nota de aplicações no formato de arquivo .ZIP. Parece ser uma criptografia feito no fluxo criptografado. Se alguém se sente como codificá-lo ...

Agora, eu me pergunto por que Sun não incluí-lo em sua biblioteca? Falta de padrão? Patentes / questão legal? Fraco demais para ser utilizável?

Existe um bom (livre) biblioteca para isso?

java.util.zip fará o fechando, mas ele não vai fazer as senhas. E não, eu não sei de nenhum mais livre que irá. O mais barato que eu vi é US $ 150 para um assento desenvolvedor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top