salve,

sto scrivendo un programmino per criptare e decriptare file in rsa utilizzando la Java Security.
Quando cripto e decripto file minori della grandezza della chiave(1024bit) va tutto bene.

il problema sorge quando devo decriptare i file splittati in più blocchi di keysize/8 perchè la loro dimensione è maggiore della keysize.

Di seguito posto il codice.

codice:
public class  Rsa_file{

	public static KeyPairGenerator kpg=null;
	
	
	public static byte[] file_tobyte(File f)throws IOException {
		  
		int size = ((int) f.length());
		byte[] data = new byte[size];
		FileInputStream freader = new FileInputStream(f);
		System.out.println("\nDimensione in byte : " + freader.read(data, 0, size));
		freader.close();
		return data;	
	}
	
	public static String getText (byte[] arr)throws UnsupportedEncodingException {
	  String s = new String( arr, "ISO-8859-1" );
	  return s;
	}
	
	
	
	
	public static byte[] encrypt(String path_file,PublicKey pubblica) throws Exception {
		File ff2=new File("/home/dario/Scrivania/utenti_critt.txt");
		FileWriter fw=new FileWriter(ff2);
		File ff=new File(path_file);
		byte[] plain=file_tobyte(ff);
		
		 int dim_max = (1024/8)-11;
         int dim_dati = plain.length;
         Cipher c=null;
 		 byte[] encodeFile;
		
        if( (dim_dati< dim_max) ){
        	System.out.println("pppppppppp");
    		c = Cipher.getInstance("RSA/ECB/PKCS1Padding");			
    		c.init(Cipher.ENCRYPT_MODE, pubblica);
    		System.out.println("publick key"+pubblica);
    		encodeFile = c.doFinal(plain);
    		System.out.println("Frase cifrata "+getText(encodeFile));
    		fw.write(getText(encodeFile));
    		fw.close();
        }
        
        else{
         
        	c = Cipher.getInstance("RSA/ECB/PKCS1Padding");			
    		c.init(Cipher.ENCRYPT_MODE, pubblica);
    		
    		encodeFile=c.doFinal(plain,0,dim_max);
    		System.out.println("Frase cifrata "+getText(encodeFile));
    		//fw.write(getText(encodeFile));
    		fw.write(getText(encodeFile));
    		fw.close();	        	
        }
		
	return encodeFile;	
	}

	
	
	public static byte[] decrypt_file(byte[] plain,PrivateKey privata) throws Exception {
		File ff2=new File("/home/dario/Scrivania/utenti_critt.txt");
		FileInputStream fr=new FileInputStream(ff2);
		File ff3=new File("/home/dario/Scrivania/utenti_decritt.txt");
		FileWriter fw=new FileWriter(ff3);

		
		Cipher c=null;
		byte[] decodeFile=file_tobyte(ff2);

		System.out.println("decode"+decodeFile.length);
		System.out.println("plain"+plain.length);
		
		if(decodeFile.length<128){
			c = Cipher.getInstance("RSA/ECB/PKCS1Padding");			
			c.init(Cipher.DECRYPT_MODE, privata);
			decodeFile = c.doFinal(plain);
			System.out.println("private key"+privata);
			//System.out.println("Frase decifrata "+getText(decodeFile));
			fw.write(getText(decodeFile));
			fw.close();
			fr.close();
			}
		
		else{
			c = Cipher.getInstance("RSA/ECB/PKCS1Padding");			
			c.init(Cipher.DECRYPT_MODE, privata);

			plain=c.doFinal(decodeFile,0,128);
			
			
			System.out.println("private key"+privata);
			//System.out.println("Frase decifrata "+getText(decodeFile));
			fw.write(getText(decodeFile));
			fw.close();
			fr.close();

		}
		
		
		return decodeFile;
	}
	

	
	public static void main(String[] args) throws Exception {
		/*KeyPair kp=gen_key(kpg);
		PublicKey pubblica=kp.getPublic();
		PrivateKey privata=kp.getPrivate();*/
		
		//ISTANZIO UN OGGETTO LOADKEYS CHE MI PERMETTE DI CARICARE LE CHIAVI MEMORIZZATE NEL KEYSTORE.
		LoadKeys aa=new LoadKeys();
		KeyPair kp=aa.getkey_fromkeystore("/home/dario/prova.jks", "storepass", "keypass", "alias", "JKS");
		PublicKey pubblica=kp.getPublic();
		PrivateKey privata=kp.getPrivate();
		
		File a=new File("/home/dario/Scrivania/utenti");
		long len=a.length();
		//CODIFICA
		byte[] cypher=encrypt("/home/dario/Scrivania/utenti",pubblica);

		//System.out.println("MAIN stringa cyphered "+getText(cypher));
		

		//DECODIFICA
		byte[] out=decrypt_file(cypher,privata);
		//System.out.println("MAIN Frase decifrata: "+getText(out));
         
	}
}