| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/04/2010 16:37:16
|
wellington7
JavaEvangelist
![[Avatar]](/images/avatar/b80d1ec3ddec44d03ab7b4d32a6ae480.jpg)
Membro desde: 16/03/2007 14:03:02
Mensagens: 333
Offline
|
Alguma idéia de como rodar este código corretamente (está lançando Exception com mensagem "too much data for RSA block"
|
"Faça por onde que eu te ajudarei"
Idéias que você deveria conhecer:
Lombok
SSCCE |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/04/2010 17:21:31
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
Você não pode criptografar um bloco maior que o tamanho da chave, usando RSA. No seu caso, o tamanho da chave é de alguns poucos bits, e você quer criptografar um bloco de 100 bytes (800 bits).
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/04/2010 17:29:58
|
Tiago Borghi
Entusiasta Java
Membro desde: 04/03/2010 09:05:24
Mensagens: 20
Offline
|
O tamanho máximo do bloco é de 16 bytes, se quiser cifrar um bloco maior terá que fazer por partes. Divida os 100 bytes em blocos de 16 e cifre-os, concatenando o resultado.
Na hora do decrypt terá que fazer a mesma coisa
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/04/2010 17:34:08
|
wellington7
JavaEvangelist
![[Avatar]](/images/avatar/b80d1ec3ddec44d03ab7b4d32a6ae480.jpg)
Membro desde: 16/03/2007 14:03:02
Mensagens: 333
Offline
|
tentei faze um loop..
..mas não deu certo (mesmo com array de bytes de 0x03) o cipherText se torna um array de zeros..
|
"Faça por onde que eu te ajudarei"
Idéias que você deveria conhecer:
Lombok
SSCCE |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/04/2010 17:57:37
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
A criptografia RSA não é destinada a ser usada para criptografar coisas, apenas chaves.
Não tente criptografar 100 bytes se sua chave RSA tiver menos de 800 bits.
E essa história de criptografar por blocos, no caso da RSA, não é adequado porque isso expõe uma vulnerabilidade no algoritmo quando uma mesma chave RSA é usada para criptografar vários blocos. Nunca se usa apenas a RSA sozinha; ela deve ser sempre combinada com um algoritmo simétrico como o AES ou o Triple-DES.
O que se costuma fazer é criar uma chave AES (por exemplo), que tem sempre 128/192/256 bits, e criptografar essa chave usando RSA.
Então você criptografa o seu texto original (aquele trambolho que tem 100 ou mais bytes) com essa chave AES, e criptografa a chave AES com a chave RSA.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/04/2010 10:22:33
|
wellington7
JavaEvangelist
![[Avatar]](/images/avatar/b80d1ec3ddec44d03ab7b4d32a6ae480.jpg)
Membro desde: 16/03/2007 14:03:02
Mensagens: 333
Offline
|
entanglement wrote:A criptografia RSA não é destinada a ser usada para criptografar coisas, apenas chaves.
Não tente criptografar 100 bytes se sua chave RSA tiver menos de 800 bits.
E essa história de criptografar por blocos, no caso da RSA, não é adequado porque isso expõe uma vulnerabilidade no algoritmo quando uma mesma chave RSA é usada para criptografar vários blocos. Nunca se usa apenas a RSA sozinha; ela deve ser sempre combinada com um algoritmo simétrico como o AES ou o Triple-DES.
O que se costuma fazer é criar uma chave AES (por exemplo), que tem sempre 128/192/256 bits, e criptografar essa chave usando RSA.
Então você criptografa o seu texto original (aquele trambolho que tem 100 ou mais bytes) com essa chave AES, e criptografa a chave AES com a chave RSA.
É o que vou fazer, estou usando AES e vou criptografar a cheve usando RSA. Mas o número de chaves vai variar, posso criptografar apenas 1 chave por vez? E se for o caso, o tamanho das chaves AES é constante? A aplicação nunca vai falhar por estourar o tamanho do bloco RSA?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 06/04/2010 11:50:30
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
1) Eu recomendo criptografar uma chave de cada vez.
2) O tamanho de uma chave AES pode ser: 128, 192 ou 256 bits. É só questão de escolher (e lembrar que o Java, se você não alterar um arquivo na JRE, só aceita chaves de 128 bits no máximo. Veja em:
https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jce_policy-6-oth-JPR@CDS-CDS_Developer
( Java(TM) Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 6 )
|
|
|
 |
|
|