Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Errore criptare e decriptare dati: javax.crypto.BadPaddingException: Data must start with zero
Forum - Java - Errore criptare e decriptare dati: javax.crypto.BadPaddingException: Data must start with zero

Avatar
kate (Normal User)
Newbie


Messaggi: 1
Iscritto: 02/02/2011

Segnala al moderatore
Postato alle 16:50
Mercoledì, 02/02/2011
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
Codice sorgente - presumibilmente Java

  1. try
  2.                 {
  3.                         cipherDec = Cipher.getInstance("RSA/ECB/PKCS1Padding");
  4.                         byte[] criptedBytes = criptedReq.getCriptedBytes();
  5.                        
  6.                         ByteArrayInputStream bais = new ByteArrayInputStream(criptedBytes);
  7.                 ByteArrayOutputStream baos = new ByteArrayOutputStream();
  8.                        
  9.                 byte[] buf = new byte[100];
  10.             int bufl;
  11.             while ( (bufl = bais.read(buf)) != -1)
  12.             {
  13.                 byte[] encText = null;
  14.                 encText = decrypt(copyBytes(buf,bufl),serverMiddleware.getPrivateKey());
  15.        
  16.                 baos.write(encText);
  17.             }
  18.                  }
  19.         catch(Exception e)
  20.         {
  21.                 e.printStackTrace();
  22.                 return null;
  23.         }      
  24. }
  25. public static byte[] decrypt(byte[] text, PrivateKey key) throws Exception     
  26.         {
  27.         byte[] decryptedText = null;
  28.         try
  29.         {
  30.             // decrypt the text using the private key
  31.                
  32.             cipherDec.init(Cipher.DECRYPT_MODE, key);
  33.             decryptedText = cipherDec.doFinal(text);
  34.         }
  35.         catch (Exception e)
  36.         {
  37.            e.printStackTrace();
  38.                 throw e;
  39.         }
  40.         return decryptedText;
  41.     }
  42.  
  43.         //permette di memorizzare byte alla volta di dimensione giusta
  44.         public static byte[] copyBytes(byte[] arr, int length)
  45.         {
  46.             byte[] newArr = null;
  47.             if (arr.length == length)
  48.             {
  49.                 newArr = arr;
  50.             }
  51.             else
  52.             {
  53.                 newArr = new byte[length];
  54.                 for (int i = 0; i < length; i++)
  55.                 {
  56.                     newArr[i] = (byte) arr[i];
  57.                 }
  58.             }
  59.             return newArr;
  60.         }



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 il 03/02/2011 alle 13:26
PM