|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
Pb cryptage et décryptage entre appli pc et android |
Débuté par Julie, 01 déc. 2017 14:01 - 17 réponses |
| |
| | | |
|
| |
Posté le 01 décembre 2017 - 14:01 |
Bonjour, J’ai une application sur tablette android qui synchronise par réplication bidirectionnelle une base utilisateur avec comme champ un login et un mot de passe crypté J’ai un soucis car je n’arrive pas à décrypter le mot de passe sur la tablette si il a été renseigné sur un pc et vice versa
Voici mon code sur le l’application pc pour crypter le mot de passe :
gbufCle est un Buffer = HashChaîne(HA_MD5_128, "mot de passe")
bufMotPasseSaisi est un Buffer bufMotPasseCrypte est un Buffer
bufMotPasseSaisi=SAI_MotDePasse bufMotPasseCrypte=CrypteStandard(bufMotPasseSaisi, gbufCle, crypteAES128) INTERV_Utilisateur.MotDePasse=bufMotPasseCrypte
Voici mon code sur le l’application android pour crypter le mot de passe :
gbufCle est un Buffer = HashChaîne(HA_MD5_128, "mot de passe")
bufMotPasseSaisi est un Buffer bufMotPasseCrypte est un Buffer
bufMotPasseSaisi=SAI_MotDePasse bufMotPasseCrypte=CrypteStandard(bufMotPasseSaisi, gbufCle, crypteAES128) INTERV_Utilisateur.MotDePasse=bufMotPasseCrypte
Voici mon code sur le l’application android pour décrypter le mot de passe :
bufMotPasseDéCrypté est un Buffer ="" bufMotPasseStocké est un Buffer
bufMotPasseStocké=INTERV_Utilisateur.MotDePasse bufMotPasseDéCrypté=DécrypteStandard(bufMotPasseStocké,gbufCle,crypteAES128) |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 01 décembre 2017 - 15:07 |
Bonjour Votre souci vient probablement du fait que le PC gère les chaines de caractère en ANSI et qu'Android les gère en UNICODE. Sur Andoid pour crypter votre password, testez
bufMotPasseSaisi = UnicodeVersAnsi(SAI_MotDePasse)
Pour le décryptage, vérifiez qu' INTERV_Utilisateur.MotDePasse est défini comme une chaine ANSI. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 574 messages Popularité : +222 (260 votes) |
|
Posté le 02 décembre 2017 - 05:42 |
Bonjour,
C'est en effet un problème de codage de caractères. Mais plutôt que d'utiliser de l'ANSI et de l'unicode, il faut utiliser l'utf8 qui est un standard contrairement à l'unicode.
ce qui donnerait sur Android et PC
gbufCle est un Buffer = HashChaîne(HA_MD5_128, ChaîneVersUTF8("mot de passe"))
bufMotPasseSaisi est un Buffer bufMotPasseCrypte est un Buffer
bufMotPasseSaisi=ChaîneVersUTF8(SAI_MotDePasse) bufMotPasseCrypte=CrypteStandard(bufMotPasseSaisi, gbufCle, crypteAES128) INTERV_Utilisateur.MotDePasse=bufMotPasseCrypte
Pour décrypter
gbufCle est un Buffer = HashChaîne(HA_MD5_128, ChaîneVersUTF8("mot de passe")) bufMotPasseDéCrypté est un Buffer ="" bufMotPasseStocké est un Buffer
bufMotPasseStocké=INTERV_Utilisateur.MotDePasse bufMotPasseDéCrypté=UTF8VersChaîne(DécrypteStandard(bufMotPasseStocké,gbufCle,crypteAES128))
-- Cordialement,
Philippe SAINT-BERTIN Géode Informatique |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 946 messages Popularité : +102 (110 votes) |
|
Posté le 02 décembre 2017 - 12:51 |
Bonjour @Philippe SB : «il faut utiliser l'utf8 qui est un standard contrairement à l'unicode.» Si ce que j'ai lu sur wikipedia est exacte (https://fr.wikipedia.org/wiki/Unicode) Unicode est un standard...non ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 574 messages Popularité : +222 (260 votes) |
|
Posté le 03 décembre 2017 - 07:14 |
Bonjour,
@Philippe Pasquali: En effet, unicode est normalisé mais il n'est pas codé de la même manière selon la plateforme, notamment sur windows unicode est sur 2 octets et sur ios 4 octets. Donc je suppose qu'il peut y avoir des erreurs de conversion.
D'ailleurs dans la doc il est bien précisé:
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).
Alors du coup moi dans le doute !!!
-- Cordialement,
Philippe SAINT-BERTIN Géode Informatique |
| |
| |
| | | |
|
| | |
| |
Posté le 05 décembre 2017 - 09:18 |
Merci pour votre aide La solution de Philippe SB fonctionne tres bien |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 155 messages |
|
Posté le 14 octobre 2018 - 10:17 |
Bonjour,
J'ai tenté d'appliquer vos conseils sans succès. Je tente d'échanger des informations entre PC <=> Android Sur PC, l'appli charger un fichier texte et le crypte (fait avec windev 19). Je prend le fichier et l'intègre dans un projet WM22
Sur Android, je charge le fichier crypté puis le décrypte (fait avec WM22)
Au niveau du code : Sur l'app W19
gbufCle est un Buffer = HashChaîne(HA_MD5_128, ChaîneVersUTF8("XXXXX")) monCode est un Buffer chaineCrypte est un Buffer monCode=ChaîneVersUTF8(fChargeTexte(SAI_Fichier_Src)) chaineCrypte =Crypte(monCode,gbufCle) fSauveTexte(SAI_Fichier_Dest + "kdw.gch",chaineCrypte )
Je vérifie avec :
gbufCle est un Buffer = HashChaîne(HA_MD5_128, ChaîneVersUTF8("XXXXX")) chaineDecrypte est un Buffer ="" chaineCrypte est un Buffer
chaineCrypte =fChargeBuffer(SAI_Fichier_Src_GCH) chaineDecrypte =UTF8VersChaîne(Décrypte(chaineCrypte , gbufCle)) fSauveBuffer(SAI_Fichier_Dest_Html + "listing.html",chaineDecrypte )
Cela fonctionne.
Depuis
bufSFichierHtmlKey = HashChaîne(HA_MD5_128, ChaîneVersUTF8("Deuchbill6310!+10")) sMessage=fChargeBuffer(fichierHtmlPath+fichierHtmlName) gbufCodeHtml=UTF8VersChaîne(Décrypte(sMessage, bufSFichierHtmlKey)) Et la, j'obtient l'erreur "Décryptage impossible. Vérifiez que le mot de passe et le type de cryptage spécifiés correspondant bien à ceux choisis lors du cryptage."
J'ai vérifié, les valeurs par defauts sont les mêmes pour W19 et WM22.
Quelqu'un aurait une idée ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 155 messages |
|
Posté le 14 octobre 2018 - 10:17 |
Bonjour,
J'ai tenté d'appliquer vos conseils sans succès. Je tente d'échanger des informations entre PC <=> Android Sur PC, l'appli charger un fichier texte et le crypte (fait avec windev 19). Je prend le fichier et l'intègre dans un projet WM22
Sur Android, je charge le fichier crypté puis le décrypte (fait avec WM22)
Au niveau du code : Sur l'app W19
gbufCle est un Buffer = HashChaîne(HA_MD5_128, ChaîneVersUTF8("XXXXX")) monCode est un Buffer chaineCrypte est un Buffer monCode=ChaîneVersUTF8(fChargeTexte(SAI_Fichier_Src)) chaineCrypte =Crypte(monCode,gbufCle) fSauveTexte(SAI_Fichier_Dest + "kdw.gch",chaineCrypte )
Je vérifie avec :
gbufCle est un Buffer = HashChaîne(HA_MD5_128, ChaîneVersUTF8("XXXXX")) chaineDecrypte est un Buffer ="" chaineCrypte est un Buffer
chaineCrypte =fChargeBuffer(SAI_Fichier_Src_GCH) chaineDecrypte =UTF8VersChaîne(Décrypte(chaineCrypte , gbufCle)) fSauveBuffer(SAI_Fichier_Dest_Html + "listing.html",chaineDecrypte )
Cela fonctionne.
Depuis
bufSFichierHtmlKey = HashChaîne(HA_MD5_128, ChaîneVersUTF8("Deuchbill6310!+10")) sMessage=fChargeBuffer(fichierHtmlPath+fichierHtmlName) gbufCodeHtml=UTF8VersChaîne(Décrypte(sMessage, bufSFichierHtmlKey)) Et la, j'obtient l'erreur "Décryptage impossible. Vérifiez que le mot de passe et le type de cryptage spécifiés correspondant bien à ceux choisis lors du cryptage."
J'ai vérifié, les valeurs par defauts sont les mêmes pour W19 et WM22.
Quelqu'un aurait une idée ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 195 messages Popularité : +3 (3 votes) |
|
Posté le 21 novembre 2021 - 15:31 |
Bonjour,
Post qui date de Mathusalem mais bon j'ai tellement galéré que je passe dire un GROS merci à Philippe SB dont la solution #3 fonctionne pour décrypter sous android un crypte venant d'un pc et vive l'UTF8 ! |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 195 messages Popularité : +3 (3 votes) |
|
Posté le 22 novembre 2021 - 16:38 |
Re,
Moi pas comprendre ! je pensais avoir la solution avec l'UTF8 mais non en fait
The code en windev :
MonBuffer est un Buffer = ChaîneVersUTF8(NumériqueVersChaîne(MonID)) Trace(BufferVersHexa(MonBuffer)) CléDecryptHashé est un Buffer = HashChaîne(HA_MD5_128,ChaîneVersUTF8("Windev")) Trace(BufferVersHexa(CléDecryptHashé)) ChaineCrypté est un Buffer = CrypteStandard(MonBuffer,CléDecryptHashé,crypteAES128) Trace(BufferVersHexa(ChaineCrypté))
Si je lance plusieurs fois le même code avec le même ID a chiffrer... et bien mon dernier trace est différent à chaque fois
32 38 31 34 37 34 39 37 36 37 31 30 36 35 39 68 AE 5A 2F 85 A7 AC 6E 06 AE 35 31 7E 67 56 2B 57 A7 12 D7 C2 2F 9B 9E 4E B5 ED 03 5E 25 E5 A5<\r><\n>D3 1B 04 D4 53 9D 2C 78 08 0C A0 54 2A CE EC 6D 32 38 31 34 37 34 39 37 36 37 31 30 36 35 39 68 AE 5A 2F 85 A7 AC 6E 06 AE 35 31 7E 67 56 2B 7E BD 0A 7A 80 83 AD 07 57 41 43 07 C4 26 41 7B<\r><\n>6F 4F 47 98 FD FF 3E AE 2E 06 5F 55 B4 BF 7D 76 32 38 31 34 37 34 39 37 36 37 31 30 36 35 39 68 AE 5A 2F 85 A7 AC 6E 06 AE 35 31 7E 67 56 2B B7 41 DA 35 87 1D B7 C1 11 40 59 5D 84 B6 2E 9A<\r><\n>9C 56 7E 5C 6F 81 C6 A9 8E 71 01 A8 32 CE AD 96
Tu m'étonnes que derrière j'arrive pas à déchiffrer pour retourner sur mon ID de départ !
Une idée ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 361 messages Popularité : +93 (137 votes) |
|
Posté le 22 novembre 2021 - 18:30 |
Je rappelle que sous windows l'encodage est ANSI Sous mobile l'encodage est unicode Donc il faut mettre toutes les chaînes et buffer en ANSI Utf8 ne sert que pour l'encodage sur le web Qui est en réalité un format de fichier texte |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 195 messages Popularité : +3 (3 votes) |
|
Posté le 22 novembre 2021 - 19:29 |
Certes mais là tous mes tests sont sur windev, sur la même machine
MonBuffer est un Buffer = ChaîneVersUTF8(NumériqueVersChaîne(MonID)) Trace(BufferVersHexa(MonBuffer)) 1er test 32 38 31 34 37 34 39 37 36 37 31 30 36 35 39 2eme test 32 38 31 34 37 34 39 37 36 37 31 30 36 35 39 3eme test 32 38 31 34 37 34 39 37 36 37 31 30 36 35 39 CléDecryptHashé est un Buffer = HashChaîne(HA_MD5_128,ChaîneVersUTF8("Windev")) Trace(BufferVersHexa(CléDecryptHashé)) 1er 68 AE 5A 2F 85 A7 AC 6E 06 AE 35 31 7E 67 56 2B 2eme 68 AE 5A 2F 85 A7 AC 6E 06 AE 35 31 7E 67 56 2B 3eme 68 AE 5A 2F 85 A7 AC 6E 06 AE 35 31 7E 67 56 2B ChaineCrypté est un Buffer = CrypteStandard(MonBuffer,CléDecryptHashé,crypteAES128) Trace(BufferVersHexa(ChaineCrypté)) 1er 57 A7 12 D7 C2 2F 9B 9E 4E B5 ED 03 5E 25 E5 A5<\r><\n>D3 1B 04 D4 53 9D 2C 78 08 0C A0 54 2A CE EC 6D 2eme 7E BD 0A 7A 80 83 AD 07 57 41 43 07 C4 26 41 7B<\r><\n>6F 4F 47 98 FD FF 3E AE 2E 06 5F 55 B4 BF 7D 76 3eme B7 41 DA 35 87 1D B7 C1 11 40 59 5D 84 B6 2E 9A<\r><\n>9C 56 7E 5C 6F 81 C6 A9 8E 71 01 A8 32 CE AD 96
Je veux bien sur récupérer/décrypter sur WM ensuite mais là comment expliquer que sur la même machine que le cryptestandard me donne des résultats différents à chaque fois alors que le Monbuffer et le Clédecryptehashé sont les mêmes ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 361 messages Popularité : +93 (137 votes) |
|
Posté le 22 novembre 2021 - 19:39 |
Paramètres du projet ANSI ou unicode ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 195 messages Popularité : +3 (3 votes) |
|
Posté le 22 novembre 2021 - 20:30 |
ANSI si c'est bien là qu'il faut trouver l'info...
|
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 361 messages Popularité : +93 (137 votes) |
|
Posté le 22 novembre 2021 - 23:48 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 195 messages Popularité : +3 (3 votes) |
|
Posté le 23 novembre 2021 - 08:04 |
OK WD en ANSI WM android en UNICODE WM iOs pas d'onglet unicode dans la configuration !
Celà n'explique tout de même pas que lorsque je test QUE dans windev les codes ci-dessus, la fonction cryptestandard m'envoi un résultat différend à chaque GO |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 144 messages Popularité : +50 (142 votes) |
|
Posté le 23 novembre 2021 - 08:51 |
Bonjour,
La fonction CrypteStandard renvoie un résultat différent à chaque appel et c'est le fonctionnement normal. Une randomisation est faite par CrypteStandard ce qui donne un résultat crypté unique et donc différent à chaque exécution. Une fois le message crypté il faut le mémoriser pour le décrypter plus tard.
-- Thierry TILLIER Développeur Windev-Webdev Formation Windev : https://coursdinfo.teachable.com/ Formation bureautique : https://coursdinfo.net Tuto WINDEV sur ma chaîne Youtube |
| |
| |
| | | |
|
| | |
| |
Posté le 24 février 2023 - 19:38 |
POUR TOUT T_Login //On décrypte tous les login de la table et on les compare avec ce qui vient d'être tapé pour vérifier //que le login existe bien dans la table t_login sLoginDécrypté = ChaineDécrypte(T_Login.Login) Trace("sLoginDécrypté :"+sLoginDécrypté+RC+" ChaineDécrypte(T_Login.Login) :"+ChaineDécrypte(T_Login.Login)) SI sLoginDécrypté = sLogin ALORS //si ChaineDécrypte(T_Login.Login) = sLogin ALORS //on a trouvé le login, on Hash le mot de passe et on vérifie qu'il correspond avec celui "hashé" // de la table t_login sMotDePasseHashé = HashMotDePasse(sMDP) Trace("sMotDePasseHashé :"+sMotDePasseHashé+RC+"HashMotDePasse(sMDP) :"+HashMotDePasse(sMDP)) SI sMotDePasseHashé = T_Login.MDP ALORS //si HashMotDePasse(sMDP) = T_Login.MDP ALORS
//CONNEXION HLitRecherchePremier(T_Utilisateurs,IDT_Utilisateurs,T_Login.IDT_Utilisateurs) SI HTrouve(T_Utilisateurs) ALORS gsLogin = sLogin gsNom = ChaineDécrypte(T_Utilisateurs.Nom) gsPrénom = ChaineDécrypte(T_Utilisateurs.Prenom) gnId_Employe = T_Utilisateurs.IDT_Utilisateurs OuvreFenêtreMobile(FEN_Accueil) SINON Info("Vous avez fait une erreur dans la saisie",Faux,1) RETOUR FIN SINON Info("Vous avez fait une erreur dans la saisie",Faux,1) RETOUR FIN FIN FIN
Bonsoir Thierry,
J'ai suivi avec beaucoup d'intérêts votre et j'ai essayé de les mettre en pratique.
Ce code fonction bien lorsque je l'éxécute sur le pc, mais dès que je suis le mobile, la variable sLoginDécrypté par exemple qui devraît renvoyer la valeur de ChaineDécrypte(T_Login.Login), renvoie au final une chaine vide
Si vous aviez l'amabilité de m'aiguiller vers une solution.
En vous remerciant par avance. Erick |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|