2010-05-27 5 views
0

Je suis actuellement confronté à une erreur de BadPaddingException. J'envoie les données cryptées du client au serveur. Le serveur effectuera le décryptage sur les données reçues.
Quelqu'un pourrait-il m'aider à jeter un oeil aux codes et à pointer l'erreur, s'il vous plaît.Erreur BadPaddingException dans l'enryptage/décryptage RSA

côté client

try{ 
    Cipher c = Cipher.getInstance("RSA"); 
    c.init(Cipher.ENCRYPT_MODE, servPubKey); 
    String myMessage = "this is a secret message"; 
    byte[] msgByte = myMessage.getBytes(); 
    ObjectOutputStream outVehicle3 = new ObjectOutputStream(socket.getOutputStream()); 
    ParamClass print4 = new ParamClass (cipherText); 
    outVehicle3.writeObject(print4); 
} catch (Throwable e) { 
    // TODO Auto-generated catch block 
    tv.append("\nUnable to perform RSA encryption!"); 
    e.printStackTrace(); 
} 

côté serveur

ObjectInputStream inServ3 = new ObjectInputStream(socket.getInputStream()); 
try{ 
    ParamClass print5 = (ParamClass) (inServ3.readObject()); 
    Cipher dec = Cipher.getInstance("RSA"); 
    dec.init(Cipher.DECRYPT_MODE, serverPrivateKey); 
    byte[] dectyptedText = dec.doFinal(print5.cipherText); 
    String decipherText = dectyptedText.toString(); 
    System.out.println("\nDecrypted Message to string: " + decipherText); 
}catch (Throwable e) { 
    e.printStackTrace(); 
    System.out.println("Unable to perform RSA decryption!"); 
} 

il dit que l'erreur occoured dans la ligne suivante.

byte[] dectyptedText = dec.doFinal(print5.cipherText); 

Merci d'avance pour votre aide et vos conseils.

Répondre

2

Je suppose que vous manquez cette ligne du code client:

byte[] cipherText = c.doFinal(msgByte); 

Sauf pour cela, l'erreur la plus probable est que servPubKey et serverPrivateKey ne correspond pas (ils ne sont pas les deux moitiés du même Clé USB RSA).

Un moyen rapide de vérifier qu'ils correspondent est d'imprimer servPubKey.getModulus() et serverPrivateKey.getModulus() et de vérifier qu'ils sont identiques.