Problème avec le HelloConnectMessage

Inscrit
16 Octobre 2019
Messages
27
Reactions
14
#1
Salut la communauté, récemment je me suis lancé dans un projet de créer un émulateur. Présentement, je rencontre un pépin au niveau du HelloConnectMessage.

Je bloque au niveau de la vérification de la clé public. Quand je regarde la structure du client (SWF)
Code:
    public function setPublicKey(publicKey:Vector.<int>):void
    {
        var commonMod:Object;
        var baSignedKey:ByteArray = new ByteArray();
        var i:int;
        while (i < publicKey.length)
        {
            baSignedKey.writeByte(publicKey[i]);
            i = (i + 1);
        };
        baSignedKey.position = 0;
        var key:ByteArray = new ByteArray();
        var readKey:RSAKey = PEM.readRSAPublicKey((new this._verifyKey() as ByteArray).readUTFBytes((new this._verifyKey() as ByteArray).length));
        try
        {
            readKey.verify(baSignedKey, key, baSignedKey.length);
        }
        catch(e:Error)
        {
            commonMod = UiModuleManager.getInstance().getModule("Ankama_Common").mainClass;
            commonMod.openPopup(I18n.getUiText("ui.common.error"), I18n.getUiText("ui.server.authentificationImpossible"), [I18n.getUiText("ui.common.ok")]);
            return;
        };
        this._publicKey = (("-----BEGIN PUBLIC KEY-----\n" + Base64.encodeByteArray(key)) + "-----END PUBLIC KEY-----");
    }
Je comprends que le Client fait une vérification ensuite il encode notre Output en base64 pour créer une clé public.
Donc de mon cote (Émulateur) , je crée une clé public de taille 1024 pour l'encrypter avec ma clé privée de taille 2048 et l'envoyer au HelloConnectMessage.
Code:
        public static byte[] Encrypt(byte[] Data, string KeyPath)
        {
            using (var RSA = new RSACryptoServiceProvider())
            {
                var Path = File.ReadAllText(KeyPath);
                RSA.ImportFromPem(Path);

                var encrypted = RSA.Encrypt(Data, RSAEncryptionPadding.Pkcs1);
                return encrypted;
            }
        }

        public static byte[] Decrypt(byte[] Data, string KeyPath)
        {
            using (var RSA = new RSACryptoServiceProvider())
            {
                var Path = File.ReadAllText(KeyPath); // Lecture du Fichier qui contient ma cle
                RSA.ImportFromPem(Path);

                var decrypted = RSA.Decrypt(Data, RSAEncryptionPadding.Pkcs1);
                return decrypted;
            }
        }

        public byte[] GetPublicKey()
        {
            var PrivateKey = @"C:\Users\Khalil\Desktop\Dofus\Keys\PrivateKey.pem"; // Recupere la PRIVATE KEY de taille 2048

            using (var RSA = new RSACryptoServiceProvider(1024)) // Genere la cle de taille 1024
            {
                var Public1024 = RSA.ExportSubjectPublicKeyInfo(); // Export la Public Key en X.509

                return Encrypt(Public1024, PrivateKey); // J'encrypte avec la PRIVATE key de taille 2048 et j'envois ca au HelloConnectMessage.
            }
        }
Malheureusement, le Client m'affiche une erreur qu'il est impossible d'authentifier le serveur. En ce moment, je comprends que dans le Try il y a un plantage.

Voici ma clé Public 2048 :
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxkh/DGtZJYfNtMkH7Gn9
a74tIG1piHmPhswNjj/rG0/j+E9nnWhVlxyVW0YgVYlU79xz0sU2402D7Mvs0Xf4
g9VTXKrq1nuz9csyTLkvTwNOxQsFVO8VfsqGvn92aITw7iu54gNEFJFch+o4N/qx
Abgrjl5lCQYVIzmVXNkpR5b/VQuPXIJSC2ybr+kN7uQC5avY/9NPr4Z1LxvXlJ7O
h5e6l5CTiUmGcLNqEgSx4jPplMWqRw8IRv932535LDXJ1DStQIzhcZtBGiArnZUw
CaZMXoqWjEuSrJcCVrxOG9GTwCYfzyPTUcnfqKr3oJzVj4w3zMNmD7Jf3yRCtlPZ
VQIDAQAB
-----END PUBLIC KEY-----
Ma clé privée 2048 :
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAxkh/DGtZJYfNtMkH7Gn9a74tIG1piHmPhswNjj/rG0/j+E9n
nWhVlxyVW0YgVYlU79xz0sU2402D7Mvs0Xf4g9VTXKrq1nuz9csyTLkvTwNOxQsF
VO8VfsqGvn92aITw7iu54gNEFJFch+o4N/qxAbgrjl5lCQYVIzmVXNkpR5b/VQuP
XIJSC2ybr+kN7uQC5avY/9NPr4Z1LxvXlJ7Oh5e6l5CTiUmGcLNqEgSx4jPplMWq
Rw8IRv932535LDXJ1DStQIzhcZtBGiArnZUwCaZMXoqWjEuSrJcCVrxOG9GTwCYf
zyPTUcnfqKr3oJzVj4w3zMNmD7Jf3yRCtlPZVQIDAQABAoIBAQCji1I3RSePXBbg
QVvmtHlQ79g6wePkrBck4JNhu/jIWzm2KpBU9aR68hmC4jFzO8Wx3Ywu0Xl3PA1P
N9gJ4cE5w69xZIw0Am4pksLXI3sQ2bKTtYZdSqHZJWTEJU/d36D1YV19PKJfsJG4
jQh3q69psqVCVTtSmRDAMBOxNHDm2QGYD74nOP7N462RjMAhsnZuhkSrdEMibSsL
w22TgcnYfQcyQSVd5K9CysaTXexBGerqhPoe7R9W+zVEonWeaY3lREicrMO00O0h
BSPZ3iIOL2/A5jVq8tGk6S+KT0z6iqIJZFKmR2UEKAA5PVAnytBXJhEM71IQrhSb
pkg+IlcVAoGBAOtGpR9g8vWYWhuo8afN54iUYl6d23BlvYLG6teweqHmshqgE6uc
bJeFZlqGyZSRZV7nbWkDvB29b/rZJeBOi+OUfxWyvLSImHSeSKP0Nk14lYZxBMG6
/3INREwAamSkC6NDdBqdITEsJ+QS50nv5TV0v/zNRGFTMInqNRFoxztXAoGBANe/
rtDAdus/Vu1dP6H11tdCjN6GZHui84yJqaGZcKEaMthyKl2ORuwgn16E9BZHKK9g
39iP0TjInxKy0l86XlFEaUhiQolbdzBdUBtjl3rHDEPNW0q0CapeJydlOEx8tvAh
vFSHUXJ2kwBR3iLccuqFM9KuExPVnv0cIRrct9EzAoGBAMCz1h8DWzxJEtTA5V1Z
yqAVWRTCGq/OxQ/OOR98jpT4zTv9jN7seg0I2DKhX43uIKdAyl5PDs8VEBjXrqwv
6Wf3greU8/ayQpyR4FFZfvipIV9CRnEe5obV0vClDn9r1ZRddUUvGbaawfmOeh4W
/RdxjqZSwgUtC/6J8/lUZop1AoGACq0Ojn/noo5407gYjQAoSHCfnedSk5elq5+o
SDnai+5K89D6bbS7p7WZjUjQ90VAKyWFDidXuBKdZIR6yoGN50GWYCGUn01qYXdM
nn5YIZg18Cj6SoEMNWUBVP66QXauasWQlzI3Ao4BijOC5YC5IwfCX7uDcCjS/D1n
GfgwFGcCgYA7LsTeeCB+jyPLO0pzRdo/Fdo1g5nbHEgptfC8asUP80cBJANCRNZ4
jDwGuhXzhJu2C0Yg4GyM16/Ovffn0wRxd5IOa4YY7zPLI6XAGQeLMVgmPmSYAX5S
8k866hdBSOwYoQvDcd3EWwlEdcC815Nx63xRjj65uSQUbzsrc2iddA==
-----END RSA PRIVATE KEY-----
Donc, je voudrais savoir où je me suis planté en regardant mon code
 

BlueDream

Administrateur
Membre du personnel
Inscrit
8 Decembre 2012
Messages
2 010
Reactions
149
#2
Tu peux générer un rapport d'erreur sur le client stp @Acer
 
Inscrit
16 Octobre 2019
Messages
27
Reactions
14
#4
Salut la communauté,

Finalement, j'ai trouvé une solution à mon problème. Le problème vient de la fonction Encrypt de C# qui jusqu'à maintenant je ne sais pas pourquoi elle ne marche pas avec une clé Priver. Cependant j'ai trouvé une alternative grâce au logiciel d' @Hetarnam que j'ai pu modifier pour résoudre mon problème.

Pour les futurs développeurs voici la solution :
Code:
        public byte[] GetPublicKey()
        {
            var PrivateKey = @"C:\Users\Khalil\Desktop\Dofus\Projet 61\Keys\PrivateKey.pem"; // Recupere la PRIVATE KEY de taille 2048
            var PublicKey = @"C:\Users\Khalil\Desktop\Dofus\Projet 61\Keys\PublicEncrypted.txt"; // Recupere la PublicKey Encryptee par la PrivateKey 2048 en base64

            var PublicKeyBase64 = File.ReadAllText(PublicKey, Encoding.UTF8);

            return Convert.FromBase64String(PublicKeyBase64);

            /*using (var RSA = new RSACryptoServiceProvider(1024)) // Genere la cle de taille 1024
            {
                var Public1024 = RSA.ExportSubjectPublicKeyInfo(); // Export la Public Key en X.509

            
                //return Encrypt(Public1024, PrivateKey); // J'encrypte avec la PRIVATE key de taille 2048 et j'envois ca au HelloConnectMessage.
            }*/
        }
la clé public en base64:
Code:
LgP18SMyOMQhewZjBnBYXvPSbCQaQnMWDGt9Y5JwyULOfyk6nC4JbNMboH9+43banIcEMCihUxqpX7K4PAKsA3BANNMpyklCxr0k3l4UB++4k5myg/bS/h9W+mMSQ2AZ9dULeHG5WDK/ANXmml+itwVazWnm1NhFR1ibikS8xBNF0ODICFUcV/4h1CCg8U5pUhrB+BS1ZFmFMRQSWiza82jTpxR0RU9Hx0r7EytTFzpvp0mzDNucPkgWGWwzncw53RyC8lUoVNXXatimYNPynpFy2HuU1tQNAn+Uhmbb3mdlYappT+5okkOJFyzfy7wP0iqSCijirydVzWxVQkBazA==
La clé privée pour décrypter les credentials :
Code:
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDTR8WDN2z/jD8LxyFKCOnTlIB5tGhlydECSKtyDBBrEQfSZFEg
6viWfBMieOVE2/CsVERGcMQbuVp5Wfim65MSHTIKZlUfYtslyHKxAeGoTAVMYyWV
qVJPINextRqNbuUa2WL01Gvtg0HQ3Eo0J/37Xatub8R6E+1HWlUUTKlfmQIDAQAB
AoGBAIvaZVZ/OMpLlmwAavurvMPN9+EX10cReSWO3tXGQJPumQPeXYlxoA1UogHe
jryu7bfUq8EI4fcMEWRkduBe7WELMNMJoM2nMpEbGmNCVwb6NLqYVdGBaFQAyqFG
dMHdWDO0AqMS9gVn9hFFMOAhlP/itjnxiTkA4+fZx8R7E/BFAkEA7kG+KAVnHzoY
4VJeI7YV2TNmMjYUtj5hr2arMJytQI2pVuohbmGYXT9PhsHzZG4QbkeP8j3WIS1V
rULNPca/dwJBAOMDvCs3T42igBQaMLITIiEsMdOTfLqUqmqlPqq+O3jVAMKTIH6H
n+87ZznFqjWz0uIuvJnkXDBgZjP5oHBLPW8CQFv6HUKt80Vm1DwH5De9D2ouIYG4
xv4jzuo7pFK76VZGWd0nvYgzPPKigjzvmtpmcwlfrv5BSOy955lfdIQoubkCQAEC
DDzY4waK+SydrSetRBKHorUAy6X8cQFGOJADhjoUIAu9IYDOU1x5lAzCnu3cHYyZ
jobUZ8BjPTDv49F71AsCQQCDLA9ibiZ7iwbopmqifY4ANnZo4XVeMDASWba35Vqe
55r8DaQfKC0RbIjBHuujJiOcVTuo1mJZzSGwIH20Wr0H
-----END RSA PRIVATE KEY-----
 
Dernière édition:
Haut Bas