Oppure

Loading
02/02/11 15:50
kate
Salve a tutti, sono nuova del sito, spero di non "violare"già da subito il regolamento!!
Sto facendo un progetto per l'università in java: client e server devono comunicare(mediante socket) scambiandosi degli Oggetti java in maniera criptata!...quando il client si connette al server richiede la sua chiave pubblica...il server gliela invia cosìchè il client può cifrare l'oggetto con la chiave pubblica!..e questo sembra riuscirci!!..il problema sta nel server..quando riceve l'oggetto, inizia a decifrarlo e alla linea cipher.doFinal(text) da l'errore sopra!!...
ho cercato in internet..ma ho trovato poco su quell'errore..sembra che sia colpa delle chiavi..che pubblica e privata non coincidono..ma io sono sicura!!..ogni volta le faccio stampare nella console e sono sempre le stesse!!
forse non va bene il padding??(le chiavi sono generate a partire dal KeyGenerator algoritmo RSA 1024 bit e salvate in due file distinti!!)serve qualche libreria in piùù??
Grazie
try
		{
			cipherDec = Cipher.getInstance("RSA/ECB/PKCS1Padding");
			byte[] criptedBytes = criptedReq.getCriptedBytes();
			
			ByteArrayInputStream bais = new ByteArrayInputStream(criptedBytes);
    		ByteArrayOutputStream baos = new ByteArrayOutputStream();
    			
    		byte[] buf = new byte[100];
            int bufl;
            while ( (bufl = bais.read(buf)) != -1)
            {
            	byte[] encText = null;
            	encText = decrypt(copyBytes(buf,bufl),serverMiddleware.getPrivateKey());
        
            	baos.write(encText);
            }
		 }
        catch(Exception e)
        {
        	e.printStackTrace();
        	return null;
        }	
}
public static byte[] decrypt(byte[] text, PrivateKey key) throws Exception	
	{
        byte[] decryptedText = null;
        try
        {
            // decrypt the text using the private key
        	
            cipherDec.init(Cipher.DECRYPT_MODE, key);
            decryptedText = cipherDec.doFinal(text);
        }
        catch (Exception e)
        {
           e.printStackTrace();
        	throw e;
        }
        return decryptedText;
    }

	//permette di memorizzare byte alla volta di dimensione giusta
	public static byte[] copyBytes(byte[] arr, int length)
	{
	    byte[] newArr = null;
	    if (arr.length == length)
	    {
	        newArr = arr;
	    }
	    else
	    {
	        newArr = new byte[length];
	        for (int i = 0; i < length; i++)
	        {
	            newArr[i] = (byte) arr[i];
	        }
	    }
	    return newArr;
	}



RISOLTO: per i posteri o per chi come me ci perderà il tempo...non di decripta a blocchi di 100, ma di 128!!!!
Ultima modifica effettuata da kate 03/02/11 12:26
aaa