Prezados, boa tarde.
Quando tento criptografar um arquivo com mais de 117 bytes me deparo com o erro:
javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 bytes
Ok, já li no forúm que ele acontece por que esse algoritmo fica vulnerável com arquivos de tamanho superior a esse, e é aconselhavel ser usado para criptografar chaves…
Porém, o arquivo que quero criptografar é um bloco de notas simples, e precisa ser com Chave pública / privada… ( Meu chefe quer assim).
Enfim, alguem sabe como habilitar a RSA para criptografar acima de 117 bytes? Preciso de uns 600 bytes somente…
Ow caso não seja possível, tem algum outro algoritmo que vocês recomendam que seja Chave privada/publica que libere a criptografia a tamanhos superiores a esse?
Obrigado pela atenção pessoal.
Att,
Diogo Barbosa.
A resposta simples é “não dá”.
A resposta correta é: RSA é feito para criptografar chaves simétricas, e habitualmente os algoritmos simétricos não têm chaves tão grandes assim (usualmente as chaves de algoritmos simétricos têm 8 - DES, 24 - Triple-DES, ou 32 - AES-256, bytes. Nunca 128 bytes ou coisas parecidas).
O que se normalmente faz é gerar uma chave simétrica aleatória, criptografar o dado com ela, e a seguir criptografar a chave com RSA. A seguir, envia-se o dado criptografado com a chave simétrica, e a chave simétrica criptografada com RSA.
Procure uma implementação disso no próprio GUJ.
Amigo, obrigado pela atenção.
Porém conforme eu falei, eu sei sobre isso…porém NECESSITO utilizar um algoritmo assimétrico para a criptografia.
Eu consegui aumentando o tamanho da chave de 1024, para algo em torno de 7168.
Porém a geração da chave demora quase 5 minutos.
Alguem sabe me dizer algum outro algoritmo assimétrico que eu possa utilizar que seja parecido com o RSA, porém seja mais rápido?
Att,
Diogo Barbosa.
Uma maneira boba (e na verdade um pouco insegura, diga-se de passagem) de resolver seu problema é dividir o seu dado em blocos de 64 bytes (por exemplo), e criptografar cada um desses blocos com a mesma chave.