IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Probleme de cryptage decryptage de chaine multi plateforme


Sujet :

WinDev

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut Probleme de cryptage decryptage de chaine multi plateforme
    Bonjour,

    J'ai besoin de pouvoir échanger des données d'une application vers une autre, des données cryptées, sous forme de fichier et compatible multi plateforme.

    J'utilise les fonction CrypteStandard et DecrypteStandard pour crypter les données mais ça ne marche pas.
    Elles sont bien cryptées mais le décryptage ne fonctionne pas.

    Mon code de cryptage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	sMessage est un Buffer = "v12"
    	bufCle est un Buffer = HashChaîne(HA_MD5_128, "1965")
    	bufCrypte est un Buffer = CrypteStandard(sMessage, bufCle, crypteAES128)
    	fEcritLigne(idfichier,bufcrypte)
    Mon code de décryptage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	bufCrypte est un Buffer = fLitLigne(IdFichier)
    	bufCle est un Buffer = HashChaîne(HA_MD5_128, "1965")
    	sRésultat est un Buffer = DécrypteStandard(bufCrypte, bufCle, crypteAES128)
    Au final, sRésultat est vide

    Je comprend pas
    Une idée ?

    Merci de votre aide
    Les solutions les plus simples sont les plus efficaces

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 942
    Points : 1 933
    Points
    1 933
    Par défaut
    Bonjour,

    Le problème que tu rencontres est un problème de codage de caractères. Il faut transformer ta chaine en utf8 avant de la crypter et de la transmettre. Je ne suis pas sûr du code à 100% car non testé, mais c'est quelque chose qui ressemble à ça.

    Il est d'ailleurs noté dans l'aide:
    Développement multi-plateforme : Pour manipuler des chaînes de caractères, il est nécessaire d'utiliser le même format sur toutes les plateformes. Il est conseillé d'utiliser des chaînes au format UTF 8 (et de convertir les chaînes Unicode si nécessaire).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sMessage est un Buffer = ChaîneVersUTF8("v12")
    bufCle est un Buffer = HashChaîne(HA_MD5_128, "1965")
    bufCrypte est un Buffer = CrypteStandard(sMessage, bufCle, crypteAES128)
    fEcritLigne(idfichier,bufCrypte)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bufCrypte est un Buffer = fLitLigne(IdFichier)
    bufCle est un Buffer = HashChaîne(HA_MD5_128, "1965")
    sRésultat est un Buffer = UTF8VersChaîne(DécrypteStandard(bufCrypte, bufCle, crypteAES128))
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut
    Merci pour le tuyau philouz, je vais tester ça ;-)
    Les solutions les plus simples sont les plus efficaces

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut
    Bon, je ne m'en sors pas.

    J’utilise le code suivant sur Windev (appli PC) et Windev mobile (appli android). Exactement le même code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    gbufBufcle est un Buffer = HashChaîne(HA_MD5_128,_ClePass)
    bufCryptee est un Buffer = _chaineACrypter
    ChaineCryptee est une chaîne = CrypteStandard(bufCryptee,gbufBufcle,crypteAES128)
    Avec les mêmes valeurs d'entrée, je n'ai pas les mêmes valeurs à la sortie.

    gbufbufcle est identique dans sur les 2 plateformes
    Mais le bufCryptee n'est pas identique dans les 2 cas
    - Sur le PC, le buffer contient bien ma donnée initiale ("v11")
    - Alors que sur Android j'ai autre chose ("v<0>1<0>1<0>")

    Au final, la ChaineCryptee finale est différente (des signes asiatiques sous android)
    Les solutions les plus simples sont les plus efficaces

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut
    j'ai "avancé" :

    Le bufcryptee est maintenant identique.
    j'ai utilisé un chaineversut8 sur android
    Mais le résultat final reste différent
    Les solutions les plus simples sont les plus efficaces

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 942
    Points : 1 933
    Points
    1 933
    Par défaut
    Bonjour,

    Pour vérifier si tes données sont identiques d'un côté et de l'autre il faut que tu passes ton buffer en hexa pour voir les caractères non imprimables. Tu compares les deux valeurs et tu verras tout de suite si c'est la même chose.

    Tu devrais faire un ChaîneVersUTF8 depuis windev en suite tu cryptes, tu transmets ta chaine qui est en utf8, ensuite tu décryptes , tu la retrouves en clair en utf8, ensuite à toi de la repasser dans le bon format selon la plateforme, unicode pour ios par exemple.

    Toutes les plateformes ne codent pas les caractères de la même manière et c'est d'autant plus vrai pour l'unicode. Il faut donc que ta chaine soit en utf8 au départ.

    Attention si tu écris ta chaine dans un fichier, car là aussi les plateformes n'enregistrent pas sur le même codage. ios enregistre en unicode et tu vas te retrouver avec des erreurs de codage encore une fois.
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut
    Mon collègue développeur a fait un projet test sous Android pour manipuler que les fonctions cryptagestandard et decryptagestandard.

    Et le constat est qu'il semble que ces fonctions soient buguées car à paramètres égaux, le résultat n'est pas toujours le même.

    Je m'explique :
    - On crypte et on décrypte avec les fonctions cryptagestandard et decryptagestandard.
    - Sans changer d'os
    - On entre une chaine à l'entrée genre "v12" puis on crypte et enfin, on décrypte
    - En toute logique, on devrait toujours retrouver notre chaine d'entrée à la sortie
    - Et bien non !
    - Quelque fois ça marche et quelque fois la chaine est vide...

    Merci PC Soft...
    Merci de ton aide Philouz, si tu as une idée, n'hésite pas ;-)
    Les solutions les plus simples sont les plus efficaces

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    A mon avis ton problème ici est que tu utilises fEcritLigne pour sauver un buffer, et fLitLigne pour le charger.
    Je pense que tu devrais plutôt utiliser fSauveBuffer et fChargeBuffer.

    Tatayo.

  9. #9
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 942
    Points : 1 933
    Points
    1 933
    Par défaut
    je viens de faire un petit test et ça fonctionne chez moi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sMessage est un Buffer = ChaîneVersUTF8("v12")
    bufCle est un Buffer = HashChaîne(HA_MD5_128, "1965")
    bufCrypte est un Buffer = CrypteStandard(sMessage, bufCle, crypteAES128)
    fSauveBuffer(fRepExe()+"\test.log",bufCrypte)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    bufCrypte est un Buffer = fChargeBuffer(fRepExe()+"\test.log")
    bufCle est un Buffer = HashChaîne(HA_MD5_128, "1965")
     
    sMessage est un Buffer = UTF8VersChaîne(DécrypteStandard(bufCrypte,bufCle,crypteAES128))
    Trace(sMessage)
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  10. #10
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 329
    Points : 3 841
    Points
    3 841
    Par défaut
    Bonjour à tous,

    Les tests dont parlait lololebricoleur se sont fait sur une plateforme identique, c'est-à-dire cryptage et décryptage de Windows vers Windows, puis cryptage et décryptage d'Android vers Android. De ce fait, je n'ai pas encodé les chaînes en UTF8, même plateforme, pas de soucis d'encodage normalement.

    Si on exécute le code de début de poste, plusieurs fois de suite, j'arrive au constat que la chaîne décryptée est soit différente, soit vide, soit, sur Windows uniquement, j'ai un message d'erreur indiquant que la chaîne à décrypter est trop courte pour contenir un vecteur.

    J'ai modifié le test en ajoutant l'encodage en UTF8 de philouz, et là, aucun soucis.
    L'autre différence avec mon code est que je ne passais pas par un fichier pour récupérer la chaîne cryptée. J'affichais les éléments de cryptage dans une liste, et je récupérais la chaîne cryptée pour le décryptage. J'ai donc modifié mon code pour passer par un fichier, sans modifier l'encodage, ça passe également. J'y perds un peu mon latin, enfin bref, ça donne des éléments pour avancer

    Autant je suis d'accord qu'il faut faire attention à l'encodage d'une plateforme à une autre, donc j'étais d'accord avec la remarque de philouz , autant il y avait un truc qui me chafouinait, d'où mes tests.

  11. #11
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 942
    Points : 1 933
    Points
    1 933
    Par défaut
    Bonjour Lo²,

    Qu'entends tu par liste ? Le problème du cryptage est que tu peux avoir des caractères non imprimables une fois le données cryptées et donc non pris en compte à l'affichage. Pour faire ton test sans fichier, tu dois à mon avis transcrire ton buffer en hexa pour ne pas perdre ces caractères.
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  12. #12
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 329
    Points : 3 841
    Points
    3 841
    Par défaut
    Par liste, j'entends Champ Liste.
    En effet, j'avais oublié les caractères non imprimables, je vais regarder si ça change, mais il est fort probable que tu es raison

    Edit : bingo

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Août 2009
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 195
    Points : 156
    Points
    156
    Par défaut
    Bonjour

    J ai transposé un de mes projets windev en mobile android qui consistait à lire des données via socket.

    Je rencontrais également des problèmes d'encodages. En allant dans la description du projet mobile, il y a une option "description de la configuration courante" qui permet de dire si les chaines sont traités en unicode ou ansi.

    En cochant 'Ansi', j'ai retrouvé un comportement comparable desktop.

    Peut être que ca peut marcher pour vous

  14. #14
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut
    Merci de toutes ces infos,

    Si je résume, nous avons plusieurs "problèmes" :
    - Les caractères invisibles qu'il faut retirer de la chaine avant de la crypter
    - Les fonctions fLitLigne et fEcritLigne qui ne sont pas adaptées
    - Des éventuels problèmes d'encodage si on passe d'une plate forme à une autre

    C'est bien ça ?

    Merci encore
    Les solutions les plus simples sont les plus efficaces

  15. #15
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 942
    Points : 1 933
    Points
    1 933
    Par défaut
    C'est pas tout à fait ça...

    - Les caractères invisibles qu'il faut retirer de la chaine avant de la crypter
    Il ne faut pas retirer les caractères invisible avant de crypter, le cryptage fait que le buffer contient des caractères non imprimables. Pour ne pas les perdre lors de l'enregistrement, il faut transformer le buffer en hexadécimal ou utiliser fSauveBuffer qui va directement enregistrer tous les caractères, même les non imprimables.

    - Les fonctions fLitLigne et fEcritLigne qui ne sont pas adaptées
    Clairement pas adaptées

    - Des éventuels problèmes d'encodage si on passe d'une plate forme à une autre
    C'est la raison pour laquelle il te faut passer le codage des caractères en utf8 qui lui serale même sur toutes les plateformes. Ensuite tu retranscris dans le bon codage selon la plateforme. unicode, ansi,...
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2016
    Messages : 35
    Points : 0
    Points
    0
    Par défaut
    Merci philouZ pour tes explications claires et précises

Discussions similaires

  1. Opengl Probleme multi plateforme
    Par Exspawn dans le forum OpenGL
    Réponses: 5
    Dernier message: 13/06/2008, 12h22
  2. [VB]Cryptage/decryptage
    Par Tyrael62 dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 25/01/2006, 18h57
  3. Probleme de coupe dans une chaine
    Par cryptorchild dans le forum Langage
    Réponses: 3
    Dernier message: 22/12/2005, 23h39
  4. Quel langage pour application multi-plateforme ?
    Par yukimura_s33 dans le forum Langages de programmation
    Réponses: 22
    Dernier message: 21/11/2005, 13h22
  5. Quel lg et IDE pour dev 1 appli multi-plateformes?
    Par Langelot dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 03/02/2005, 23h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo