Criptografia e zip

8 respostas
G

Pessoal,
estou com o seguinte problema e gostaria de saber se alguém já passou por isso e teve alguma solução.

Preciso zipar e criptografar um arquivo e enviá-lo por http e tb preciso fazer o processo inverso.

Quando estou fazendo o processo inverso, não consigo deszipar o arquivo, ocorre o seguinte erro de IO: “erro in opening zip file”. Este erro só ocorre quando descriptografo um arquivo e tento deszipá-lo.
Quando tento deszipar um arquivo que não foi criptografado, o mesmo é deszipado normalmente.

O algoritmo de criptografia utilizado é o DES.

Agradeço desde já!

8 Respostas

T

Compare o arquivo original com o arquivo resultante do processo de criptografar e descriptografar.
Devem estar diferentes, até no tamanho.
Pelo que você informou, você usou DES e não deve ter especificado nenhuma opção especial, então provavelmente seu arquivo final deve ter entre 0 a 7 bytes a mais que o arquivo original.
Uma forma de fazer ficar com o mesmo tamanho é usar o modo CFB ou OFB, mas a criptografia fica 8 vezes mais lenta.

G

Thingol,
os arquivos estão do mesmo tamanho.
Eu utilizei as opções CBC e NOPADDING.
ex: Cipher.getInstance(“DES/CBC/NoPadding”)

O erro ocorre quando tento criar um novo ZipFile para extrair os arquivos.
Ou seja, sempre quando descriptografo um arquivo não consigo mais gerar um ZipFile.

Alguma outra dica??

Grato!!

T

a) Já conferiu se os arquivos estão exatamente iguais? (faça uma comparação binária. No Linux e no Unix existe o comando “cmp” se não me engano, e no Windows use o comando “fc” com a opção “/b” (binário).
b) DES/CBC/NoPadding tem esse problema de deixar o arquivo com alguns bytes a mais. Use DES/CBC/PKCS5Padding - o arquivo criptografado fica com 1 a 8 bytes a mais, mas quando o arquivo é decifrado, ele retorna ao tamanho original.

G

Thingol,
de fato o arquivo fica maior. Mas testei tb da forma como vc falou “DES/CBC/PKCS5Padding” e este tb ficou maior.
Mas isto interferiria na questão de deszipar o arquivo?? Pois como te falei, após descriptografar um arquivo não consigo mais gerar um ZipFile para extração.
Detalhe: Se eu for através do explorer consigo deszipar o arquivo normalmente, só não consigo fazer através da minha aplicação.

Mais dicas??

T

Faça o seguinte: use o comando “jar” (que simplesmente usa as APIs java.util.zip do Java. )
Veja se é possível lidar com esse arquivo que tem alguns bytes a mais.
Acho que o comando “jar” (jar tvf para listar o arquivo, jar xvf pra abrir o arquivo) não gosta de arquivos ligeiramente corrompidos, como o que você conseguiu montar.
Se o comando “jar” não conseguir desmontar o arquivo, então você precisa resolver o problema de o arquivo ficar com um tamanho maior que o original.

Kknd

Para fazer esse tipo de transmissão adiciona mais duas “camadas” na entrada/saida, que vao ser um GZIPOutputStream e outra lá para fazer a criptografia. No livro Java in a Nutshell da OReilly tem uns exemplos que cobrem isso bem!

G

thingol, obrigado pelas dicas. Vou ver o q consigo fazer.

kknd, não consegui compreender o q vc quis dizer.

T

O que o kknd quis dizer é o seguinte: digamos que você tivesse só um arquivo. Você pode, usando GZipInputStream / GZipOutputStream e CipherInputStream / CipherOutputStream, gerar um arquivo já criptografado e comprimido (comprima primeiro, criptografe depois).

Criado 7 de fevereiro de 2007
Ultima resposta 7 de fev. de 2007
Respostas 8
Participantes 3