PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → DécrypteStandard d'une chaine crypté sous NodeJS
DécrypteStandard d'une chaine crypté sous NodeJS
Débuté par Christian H., 25 fév. 2017 14:59 - 5 réponses
Membre enregistré
36 messages
Posté le 25 février 2017 - 14:59
Bonjour à tous,

Je tente de crypter une chaine sous nodejs et de la décrypter sous WM.
Ci-dessous le code JS
var key = CryptoJS.enc.Utf8.parse('1');
        var iv = CryptoJS.enc.Utf8.parse('7061737323313233');
        var encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse("It works"), key,
            {
                keySize: 128 / 8,
                iv: iv
            });
        console.log(iv + " " + encrypted.toString());

J'obtient les valeurs :
iv : 37303631373337333233333133323333
encrypted:

Et lorsque je tente de decrypte sous WM :
Procedure mDecrypt(sCles est une chaîne, iv est un chaîne, sMessage est un chaîne)
bufCle est un Buffer = HashChaîne(HA_MD5_128, sCles)
messageCrypte est un Buffer = iv+sMessage
bufCrypte est un Buffer = DécrypteStandard(messageCrypte, bufCle, crypteAES128)

Info(bufCrypte)
RENVOYER bufCrypte


mDecrypt("1", "37303631373337333233333133323333", "Ijpt1GDVgM4MqMAQUwf0Q==")
J'obtient une chaine vide (Le décryptage du message a choué, la phgase de finalisation de l'algorithme a échoué....)

Quelqu'un aurait une idée ?
Message modifié, 25 février 2017 - 15:11
Membre enregistré
36 messages
Posté le 25 février 2017 - 17:01
J'ai vu dans quelque poste que cela pouvait provenir de l'encodage, j'ai donc modifié mon code :
Côté nodejs:
var key = 'abcdefghijklmnopqr';
        console.log(CryptoJS.enc.Utf8.parse("It works"));
        var encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse("It works"), key);
        //console.log(CryptoJS.AES.decrypt(test, key).toString(CryptoJS.enc.Utf8));
        console.log(key + " "  + encrypted.iv.toString() + " " + encrypted.toString());

Cela donne
abcdefghijklmnopqr
75b5d748e34ccbbc317c7b91d9dbb635
U2FsdGVkX19TAn9NYCG6iG3wfe0i6/RXiOoP1cidt6I=

Côté WM :
Procedure mDecrypt(sCles est une chaîne , iv est un chaîne , sMessage est un chaîne )
bufCle est un Buffer = HashChaîne(HA_MD5_128, ChaîneVersUTF8(sCles))
messageCrypte est un Buffer = ChaîneVersUTF8(iv)+ChaîneVersUTF8(sMessage)
bufdecrypte est un Buffer = DécrypteStandard(messageCrypte, bufCle, crypteAES128)


//bufSRésultat est un Buffer = DécrypteStandard(message, bufCle, crypteAES128)
RENVOYER bufdecrypte



Pas mieux, pour l'instant les tests sont fait avec l'émulateur
Membre enregistré
36 messages
Posté le 25 février 2017 - 20:57
Je pense avancer un peu, il me semble que que les infos données par la lib de cryptage (nodejs) était encodés en base64, puisque lorsque j'applique
Décrypte(sMessage, "", crypteAucun, encodeBASE64) sur mon message , je m’aperçois qu'il commence par "SALTED__"

J'ai donc maintenant :
ROCEDURE mDecrypt(sCles est une chaîne ANSI, iv est un chaîne ANSI, sMessage est un chaîne ANSI )
bufCle est un Buffer = HashChaîne(HA_MD5_128, sCles)
bufCrypte est un Buffer = Décrypte(iv, "", crypteAucun, encodeBASE64)+Décrypte(sMessage, "", crypteAucun, encodeBASE64)
sRésultat est un Buffer = DécrypteStandard(bufCrypte, bufCle,crypteAES128,crypteCBC,cryptePaddingPKCS)


Mais résultat reste désespérément vide.
Membre enregistré
36 messages
Posté le 26 février 2017 - 11:04
Apres avoir comparé les chaines cryptées avec une version en ligne, je me suis aperçu que les chaines ne correspondaient pas.
Après quelque recherches, je me suis aperçu que je faisais quelque erreurs :\ ( longueur de clés ...etc)
Pour que cela fonctionne, j'ai :
- choisi un autre algorithme : eas-128-ebc ( ne nécessite pas de préciser l'IV)
- changer de lib de cryptage sur nodejs : "crypto" au lieu de "crypto-js", je n'ai pas réussi à trouver la bonne méthode pour "crypto-js"

Et maintenant l'échange se fait correctement.
Posté le 27 février 2017 - 09:44
Christian H. a exposé le 26/02/2017 :
Apres avoir comparé les chaines cryptées avec une version en ligne, je me
suis aperçu que les chaines ne correspondaient pas.
Après quelque recherches, je me suis aperçu que je faisais quelque erreurs :\
( longueur de clés ...etc)
Pour que cela fonctionne, j'ai :
- choisi un autre algorithme : eas-128-ebc ( ne nécessite pas de préciser
l'IV)
- changer de lib de cryptage sur nodejs : "crypto" au lieu de "crypto-js", je
n'ai pas réussi à trouver la bonne méthode pour "crypto-js"

Et maintenant l'échange se fait correctement.


Perso j'ai perdu beaucoup de temps là dessus et je ne sais même plus où
j'en suis resté il y a qq mois. (peut être que j'ai viré mon
authentification cryptée pour aller plus loin ??? je ne sais plus)

Mais ce que je sais, c'est que de ne pas avoir des instructions
wlangage compatibles tout OS, c'est à l'OPPOSÉ TOTAL de ce que l'on
nous vend avec Windev Mobile.

Oui si je travaille avec WM ce n'est pas pour m'enquiquiner avec
l'encodage de caractère qui est différent, le cryptage qui est
différent, le contenu des .ini qui est différent, le json qui n'est pas
au même niveau ... A quoi sert la couche du wlangage sinon, du langage
de xieme niveau ?

--
Roumegou Eric
Membre enregistré
36 messages
Posté le 01 mai 2017 - 18:52
Je reviens un peu à la charge.

J'ai voulu compilé le code précédent pour IOS, .. bim marche pas.
bufSMessage2 est un Buffer ="a+zPoWSff+olPmtapk5T03DH0vN/3P08i7eebMJFMx55hGXvdDEhI+bBTVKv70uSxoLHTrtEGDfwlT9qSpJixWrtd7Mg2ZgYzbOD4BNZfr/B/cwJUK3ezzPkl3NymxL6aXJq7PQvsMu0QI+/lVVKdcWkdHOLy9xFBWha88CV7XZ19c5JFYmcT03AhrU3haYlplKTnnbReM3Xah9PLCgrKlA0HcA4v4kAaNdxarwS68lYMxbgg3dqbH1k3QGO4aTBzdTBDUeRUy9j9reF5dc4bqnmQeHaP2xfKLEa/c6U3FRKdJ/AzMbcDDkg3sYAH5djmZeoGlC66fD5uvmgiQC+Yo/E4C1CIVNYwTzi0s6Z12xIYogFxyhYg4THfdNEyjdEciCiUA2ZvAkyTdkrCKTfFbGwg5EWnQaCCa05zS1TywJnW5LyY4f8j240NM7tSKFhR5bqpAN4Ojlz33ZiLLsBRaamg65mKQYBVS1zHkc3b6DlvflRdH4n27wEe30T8wOzNeBbkBRASL4Qyw8sb/1HFRfb4z0awpj7qIq5tIWE3BFcSRl/xSxgzG+NYQe3pltbXZFRI7CjG8pQRvJFJX+lSBKCaqBHMj8MjJ9EkNzobRR4s01EObOFT101Z0zgQ8UN"
bufClesCryptageWS est un Buffer="5D6F8C18AE24E6AE"

mess est un Buffer=Décrypte(bufSMessage2,"",crypteAucun,encodeBASE64)
Info(DécrypteStandard(mess,bufClesCryptageWS,crypteAES128,crypteECB))


Sous Android pas de soucis, je retrouve bien mon JSON, par contre IOS chaine vide.
Cela doit peut être provenir d'un problème d'encodage, j'ai essayé de le retourner dans tous les sens sans succès.


Si quelqu'un à une idée, la je suis gavé :(
Message modifié, 01 mai 2017 - 19:03