Java - Problemas con cifrado RSA

 
Vista:

Problemas con cifrado RSA

Publicado por Antonio (9 intervenciones) el 16/01/2007 10:31:10
Buenas a todos,

Tengo un problema que no se como resolver, y tras pasar un par de días mirando por internet posibles soluciones no he conseguido encontrar nada.

Mi problema es que estoy intentando cifrar ficheros de unos 20kb. con cifrado asimétrico de clave privada y clave pública, utilizando el algoritmo RSA, y al tratar de cifrar el texto plano, me da el siguiente error.

java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block

El tamaño de la clave es el típico 1024 (keyPair.initialize(1024);). Por lo que he visto en internet hay bastante gente que tiene este problema, ¿alguien sabe como solucionarlo?

Muchas gracias y un saludo.

Os dejo el código para más ayuda

package cifrado;

import java.security.*;

import javax.crypto.*;
import javax.crypto.interfaces.*;
import javax.crypto.spec.*;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

import java.io.*;

public class FuncionaRSA {
/* Ejemplo de uso de funciones de resumen Hash
* carga el fichero que recibe como parametro y genera el resumen
*/
public static void main (String[] args) throws Exception {
// Comprobar argumentos
/*if (args.length !=1) {
mensajeAyuda();
System.exit(1);
}*/
try {
/* Cargar "provider" (sólo si no se usa el que viene por defecto) */
Security.addProvider(new BouncyCastleProvider()); // Usa provider BC
//
/* PASO 1: Crear e inicializar clave */
String textoPlano = "";
KeyPairGenerator keyPair = KeyPairGenerator.getInstance("RSA");
keyPair.initialize(1024);
KeyPair clave = keyPair.genKeyPair();

PrivateKey clavePrivada1 = clave.getPrivate();
PublicKey clavePublica1 = clave.getPublic();

System.out.println("CLAVE PRIVADA:" + new String(clavePrivada1.toString()));
System.out.println("CLAVE PUBLICA:" + new String(clavePublica1.toString()) + "\n");

/* PASO 2: Crear cifrador */
//Cipher cifrador= Cipher.getInstance("DES/ECB/PKCS5Padding");
Cipher cifrador = Cipher.getInstance("RSA/ECB/PKCS1Padding","BC");
// Algoritmo DES
// Modo : ECB (Electronic Code Book)
// Relleno : PKCS5Padding
//
/* PASO 3a: Inicializar cifrador en modo CIFRADO */
cifrador.init(Cipher.ENCRYPT_MODE, clavePublica1);

byte[] bufferPlano = new byte[1024];
byte[] bufferCifrado;
//File fichero = new File("C://Antonio//21122006_090914.xml");
File fichero = new File("C://Antonio//22122006_122247.xml");
System.out.println("El fichero es !"+fichero);
//FileInputStream in = new FileInputStream(args[0]);
FileInputStream in = new FileInputStream(fichero);
int bytesLeidos = in.read(bufferPlano,0, 1024);
int total = 0;
while(bytesLeidos != -1) { // Mientras no se llegue al final del fichero
textoPlano = textoPlano + new String(bufferPlano);
bytesLeidos = in.read(bufferPlano,0, 1024);
total += bytesLeidos;
System.out.println("bytesleidos "+total);
}
in.close();

byte[] textofinal = textoPlano.getBytes();

/* Leer fichero de 1k en 1k y pasar fragmentos leidos al cifrador */
byte[] cipherText = cifrador.doFinal(textofinal);
System.out.println("resultado "+new String(cipherText,"UTF-8"));

cifrador.init(Cipher.DECRYPT_MODE, clavePrivada1);
byte[] newPlainText = cifrador.doFinal(cipherText);
System.out.println("resultado2 \n"+new String(newPlainText,"UTF-8"));
} catch (java.security.NoSuchAlgorithmException e){
System.out.println("Excepcion "+e);
}
}

public static void mensajeAyuda() {
System.out.println("Ejemplo cifrado RSA");
System.out.println();
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problemas con cifrado RSA

Publicado por Tom (1831 intervenciones) el 16/01/2007 14:44:33
Hay un hilo muy interesante aquí:

http://forum.java.sun.com/thread.jspa?threadID=608891&messageID=3455633

Aunque lo que más se recomienda en él es NO usar RSA para cifrar un Stream, verás que alguien ha pegado una solución.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con cifrado RSA

Publicado por Antonio (9 intervenciones) el 16/01/2007 15:35:04
Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar