|
DécrypteStandard d'une chaine crypté sous NodeJS |
Started by Christian H., Feb., 25 2017 2:59 PM - 5 replies |
| |
| | | |
|
| |
Registered member 36 messages |
|
Posted on February, 25 2017 - 2:59 PM |
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 modified, February, 25 2017 - 3:11 PM |
| |
| |
| | | |
|
| | |
| |
Registered member 36 messages |
|
Posted on February, 25 2017 - 5:01 PM |
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)
RENVOYER bufdecrypte
Pas mieux, pour l'instant les tests sont fait avec l'émulateur |
| |
| |
| | | |
|
| | |
| |
Registered member 36 messages |
|
Posted on February, 25 2017 - 8:57 PM |
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. |
| |
| |
| | | |
|
| | |
| |
Registered member 36 messages |
|
Posted on February, 26 2017 - 11:04 AM |
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. |
| |
| |
| | | |
|
| | |
| |
Posted on February, 27 2017 - 9:44 AM |
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 |
| |
| |
| | | |
|
| | |
| |
Registered member 36 messages |
|
Posted on May, 01 2017 - 6:52 PM |
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 modified, May, 01 2017 - 7:03 PM |
| |
| |
| | | |
|
| | | | |
| | |
|