Bonsoir,
Je développe actuellement un émulateur WAKFU et je bloque sur une étape.
Voici les différentes étapes :
1 - Le client envoi la version au serveur
2 - Le serveur envoi au client une clef RSA 1024 bits publique
3 - Le client crypte le pseudo + mdp avec la clef RSA publique et renvoi le tout au serveur
4 - Le serveur décrypte les données avec la clef RSA privée ->>> SOUCIS
Voici les classes que j'utilise pour générer une clef puis pour décrypter le contenu envoyé par le Client : https://github.com/Velocity-/jWakfu/tree/master/src/com/velocity/jwakfu/crypto
Au niveau de mon code :
byte[] tableauRe = new byte[this.taillePaquet - 5]; // taillePaquet - 5 = 134
this.fluxEnEntree.readFully(tableauRe, 0, this.taillePaquet - 5); // Je réceptionne les infos cryptées envoyées par le client et je mets dans le tableau "tableauRe"
byte[] decoded = RSACertificateManager.INSTANCE.decode(tableauRe); // C'est ici que ça bloque
Voici le message d'erreur que j'ai :
javax.crypto.IllegalBlockSizeException: Data must not be longer than 128 bytes
at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:346)
at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:391)
at javax.crypto.Cipher.doFinal(Cipher.java:1966)
at client.RSACryptoCipher.encode(RSACryptoCipher.java:51)
at client.RSACertificateManager.decode(RSACertificateManager.java:50)
at client.traiterPaquet.run(traiterPaquet.java:63)
EDIT : Après vérifications je pense que Ankama a changé le mode de cryptage des identifiants en passant d'une clef RSA 1024 bits à 1056 bits, car je reçois des identifiants cryptés sous 132 bytes. J'ai donc modifié la génération de ma clef RSA pour envoyer une 1056 bits au client mais j'obtiens toujours une erreur au moment de décrypter ce qui est envoyé par le client :
javax.crypto.BadPaddingException: Decryption error
at sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:380)
at sun.security.rsa.RSAPadding.unpad(RSAPadding.java:291)
at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:365)
at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:391)
at javax.crypto.Cipher.doFinal(Cipher.java:1966)
at client.RSACryptoCipher.encode(RSACryptoCipher.java:51)
at client.RSACertificateManager.decode(RSACertificateManager.java:50)
Merci aux âmes généreuses qui voudront bien m'aider :) !