PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV Mobile 2024 → Buffer et cryptestandard
Buffer et cryptestandard
Started by Roumegou Eric, Nov., 07 2016 7:15 PM - 10 replies
Posted on November, 07 2016 - 7:15 PM
Bonjour,

je veux crypter un mot de passe pour le stocker dans un .ini

Ceal fonctionnait très bien avec les fonctions Crypte jusqu'à ce que je
constate les incompatibilités de cette fonction entre WD et WM

Donc il faut utiliser CrypteStandard et decrypteStandard; Cela n'est
valable qu'à partir de la 20, donc je ne peux pas utiliser mon WD19
pour calculer ce mot de passe crypté.

Qu'à cela ne tienne, je le fais en WebDev21
Le pb est que l'exemple de la doc passe toujours par une clé qui vient
d'un Hashchaine

Voilà mon code
sMessage est un Buffer = MOTDEPASSE_ENCLAIR
bufCle est un Buffer = HashChaîne(HA_MD5_128, CLE)
bufCrypte est un Buffer = CrypteStandard(sMessage, bufCle,
crypteAES128)
ACOLLERDANSINI=CLE+" = "+BufferVersHexa(bufCrypte)


je convertis ensuite en Hexa et je peux crypter/ decrypter.

Sauf que la chaine en hexa que je récupère (ACOLLERDANSINI) bouge à
chaque fois.
Je suppose que cela vient de la fonction HashChaine
Et moi je veux justement la coller dans un .ini, donc elle doit
toujours donner la même chose.

J'ai donc essayé de mettre seulement CLE, sans la hascher
Mais là j'ai une erreur sur la taille du buffer clé qui doit être à
128.
La taille de la clé (24 bits) ne correspond pas à celle attendu (128
bits) pour l'algorithme.

Comment fixer cette taille ?

sachant que bufcle est un buffer sur 128 me renvoie :
La taille de la clé (1024 bits) ne correspond pas à celle attendu (128
bits) pour l'algorithme.

Bon alors j'essaie ça
sMessage est un Buffer = MOTDEPASSE_ENCLAIR
//bufCle est un Buffer = HashChaîne(HA_MD5_128, CLE)
bufCle est un Buffer sur 16
bufCle= CLE
bufCrypte est un Buffer = CrypteStandard(sMessage, bufCle,
crypteAES128)
ACOLLERDANSINI=CLE+" = "+BufferVersHexa(bufCrypte)

plus d'erreur mais la valeur bouge à cahque execution

Merci de vos réponses.
Posted on November, 08 2016 - 9:15 AM
Bonjour,
la nuit porte conseil et j'ai résolu mon problème.
Je me réponds, ne serait ce que pour corriger qq conneries que j'ai
dites.
le pb n'est pas dans le Hashchaine et il semble que cela soit normal
que le cryptestandard renvoie des valeurs différentes.
En passant systématiquement par des chaines Unicode, j'arrive à la même
chose en WB et WM.
Maintenant c'est dit dans la doc. Dommage que leur exemple n'utilise
pas ces chaines Unicode.

côté WEBDEV pour calculer mon mot de passe
sMessage est un Buffer = MOTDEPASSE_ENCLAIR
cleUnicode est une chaîne UNICODE
cleUnicode=CLE
bufCle est un Buffer = HashChaîne(HA_MD5_128, cleUnicode)

bufCrypte est un Buffer = CrypteStandard(sMessage, bufCle,
crypteAES128)
ACOLLERDANSINI=CLE+" = "+BufferVersHexa(bufCrypte)

et pour decrypter côté WM

/je vais récupérer le mot de passe dans le .ini
pwdcrypt=INILit("PASSWORD",wprgid,"not found",ficini)
CleUnicode,adecrypter est une chaîne UNICODE
CleUnicode=wprgid
adecrypter=pwdcrypt

bufCle est un Buffer = HashChaîne(HA_MD5_128, CleUnicode)
bufCrypte est un Buffer
bufCrypte=HexaVersBuffer(adecrypter)
// Décryptage
sRésultat est un Buffer = DécrypteStandard(bufCrypte, bufCle,
crypteAES128)
wsecret=sRésultat


Merci de votre attention

Roumegou Eric avait soumis l'idée :
Bonjour,

je veux crypter un mot de passe pour le stocker dans un .ini

Ceal fonctionnait très bien avec les fonctions Crypte jusqu'à ce que je
constate les incompatibilités de cette fonction entre WD et WM

Donc il faut utiliser CrypteStandard et decrypteStandard; Cela n'est valable
qu'à partir de la 20, donc je ne peux pas utiliser mon WD19 pour calculer ce
mot de passe crypté.

Qu'à cela ne tienne, je le fais en WebDev21
Le pb est que l'exemple de la doc passe toujours par une clé qui vient d'un
Hashchaine

Voilà mon code
sMessage est un Buffer = MOTDEPASSE_ENCLAIR
bufCle est un Buffer = HashChaîne(HA_MD5_128, CLE)
bufCrypte est un Buffer = CrypteStandard(sMessage, bufCle, crypteAES128)
ACOLLERDANSINI=CLE+" = "+BufferVersHexa(bufCrypte)


je convertis ensuite en Hexa et je peux crypter/ decrypter.

Sauf que la chaine en hexa que je récupère (ACOLLERDANSINI) bouge à chaque
fois.
Je suppose que cela vient de la fonction HashChaine
Et moi je veux justement la coller dans un .ini, donc elle doit toujours
donner la même chose.

J'ai donc essayé de mettre seulement CLE, sans la hascher
Mais là j'ai une erreur sur la taille du buffer clé qui doit être à 128.
La taille de la clé (24 bits) ne correspond pas à celle attendu (128 bits)
pour l'algorithme.

Comment fixer cette taille ?

sachant que bufcle est un buffer sur 128 me renvoie :
La taille de la clé (1024 bits) ne correspond pas à celle attendu (128 bits)
pour l'algorithme.

Bon alors j'essaie ça
sMessage est un Buffer = MOTDEPASSE_ENCLAIR
//bufCle est un Buffer = HashChaîne(HA_MD5_128, CLE)
bufCle est un Buffer sur 16
bufCle= CLE
bufCrypte est un Buffer = CrypteStandard(sMessage, bufCle, crypteAES128)
ACOLLERDANSINI=CLE+" = "+BufferVersHexa(bufCrypte)

plus d'erreur mais la valeur bouge à cahque execution

Merci de vos réponses.


--
Roumegou Eric
Registered member
257 messages
Popularité : +35 (37 votes)
Posted on July, 21 2017 - 6:17 PM
Code pour Crypter en Windev 22 et Décrypter en Windev Mobile 22 (exemple brute, a retravailler suivant votre besoin):
Code Windev de cryptage
ChaineJSON est un Buffer = VariantVersJSON(LaReponse)
fSauveBuffer("C:\Users\CLOART\Desktop\PORT_CLAIRE.json",ChaineJSON)
CléDecryptageClaire est une chaîne ANSI = "kikoolol"
CléDecryptageClaireHashé est un Buffer = HashChaîne(HA_MD5_128,CléDecryptageClaire)
ChaineCrypté est un Buffer = CrypteStandard(ChaineJSON,CléDecryptageClaireHashé,crypteAES128)
fSauveBuffer("C:\Users\CLOART\Desktop\PORT_CRYPTER.json",ChaineCrypté)

Code Windev Mobile de décryptage
ChaineCrypté est un Buffer = fChargeBuffer("C:\Users\CLOART\Desktop\PORT_CRYPTER.json")
CléDecryptageClaire est une chaîne ANSI = "kikoolol"
CléDecryptageClaireHashé est un Buffer = HashChaîne(HA_MD5_128,CléDecryptageClaire)
ChaineDecrypter est un Buffer = DécrypteStandard(ChaineCrypté,CléDecryptageClaireHashé,crypteAES128)
fSauveBuffer("C:\Users\CLOART\Desktop\PORT_DECRYPTER.json",ChaineDecrypter)


--
Baptiste CLOART
Freelance
b.cloart@blv-tech.com
06.88.74.80.65
www.linkedin.com/in/cloart
www.blv-tech.com
Registered member
130 messages
Popularité : +0 (4 votes)
Posted on March, 13 2020 - 11:43 AM
Bonjour,

Je viens de voir ce sujet posté, du coup, je reposte mon problème ici:

Je souhaite crypter un mot de passe puis l' envoyer dans un fichier .INI, avant de le décrypter par la suite, lorsqu' un utilisateur rentre son mot de passe. Le souci est que je n' arrive à récupérer ni le mot de passe crypté, ni la clé de décryptage.

Voici mon code:
Dans la création du mot de passe d' abord:
//cryptage mdp
sMessage est un Buffer = SAI_Mot_de_Passe
bufCle = HashChaîne(HA_MD5_128, "mot de passe") //bufcle a été déclaré dans l' initialisation du projet
bufCrypte est un Buffer = CrypteStandard(sMessage, bufCle, crypteAES128)

//on met le mdp dans le fichier INI.
bufMDP est un Buffer = INIEcrit("Config","MotDePasse", bufCrypte, (SysRep(srAppData)) + "\config.ini")


Puis lorsque l' utilisateur entre à nouveau le mot de passe:

bufmdp est un Buffer = INILit("Config","MotDePasse", "",(SysRep(srAppData)) + "\config.ini") //mot de passe crypté

//decryptage du mot de passe
bufRésultat est un Buffer = DécrypteStandard(bufmdp, bufcle, crypteAES128)
bufmdp = SAI_Mot_de_passe
SI bufmdp = bufRésultat ALORS
Info("Mot de passe correct")
SINON
Info("Mot de passe incorrect.")
FIN


J' ai l' erreur suivante: "La taille de la clé (0 bits) ne correspond pas à celle attendu (128 bits) pour l'algorithme."

J' ai essayé de réutiliser le code d' Eric, mais je m' embrouille plus qu' autre chose, hélas.

Quelqu' un aurait-il une idée ?

Cordialement,
Registered member
473 messages
Popularité : +20 (20 votes)
Posted on March, 13 2020 - 4:56 PM
Le probleme doit venir de l'ecriture dans le .ini il faut convertir en hexa
//on met le mdp dans le fichier INI.
INIEcrit("Config","MotDePasse", BufferVersHexa(bufCrypte,SansRegroupement), (SysRep(srAppData)) + "\config.ini")


et bien sur meme chose en decryptage
bufmdp est un Buffer = HexaVersBuffer(INILit("Config","MotDePasse", "",(SysRep(srAppData)) + "\config.ini")
Registered member
130 messages
Popularité : +0 (4 votes)
Posted on March, 16 2020 - 9:59 AM
Bonjour stef,

Merci pour votre réponse, hélas, j' ai toujours le même problème :/ Une solution avait été donnée sur un autre forum, en comparant deux hash différents (celui enregistré et celui à la saisie). Le souci est que mon programme va être integré sur un serveur SMTP et que ce dernier ne reconnait pas les hash :/
Registered member
130 messages
Popularité : +0 (4 votes)
Posted on March, 16 2020 - 11:05 AM
Update: Alors, j' ai tenté une autre méthode. J' ai créé un bouton permettant de tester le mot de passe directement après la création de ce dernier:
Résultat: ça marche.
En revanche, si je ferme la session et que je la relance sur la fenêtre demandant le mot de passe, j' ai l' erreur: ""La taille de la clé (0 bits) ne correspond pas [...]"

Bizarre... Pourtant, on ne peut pas vraiment parler de persistance des données car le mot de passe est lu dans le fichier.INI qui est bien mis à jour, je suis perdu, je dois vous avouer :(
Registered member
473 messages
Popularité : +20 (20 votes)
Posted on March, 16 2020 - 11:10 AM
Je viens de faire le test en simulateur et sur Android avec le code suivant et cela fonctionne parfaitement, Je précise que je suis en 24

sMessage est une chaîne = SAI_Saisie
BufmMdpClair est un Buffer = sMessage
bufCle est un Buffer= HashChaîne(HA_MD5_128, "mot de passe")
bufCrypte est un Buffer = CrypteStandard(BufmMdpClair, bufCle, crypteAES128)

////on met le mdp dans le fichier INI.
INIEcrit("Config","MotDePasse", BufferVersHexa(bufCrypte,SansRegroupement), fRepEnCours + "\config.ini")

bufmdp est un Buffer = HexaVersBuffer(INILit("Config","MotDePasse", "",fRepEnCours + "\config.ini"))
//decryptage du mot de passe
bufRésultat est un Buffer = DécrypteStandard(bufmdp, bufCle, crypteAES128)

SI sMessage = bufRésultat ALORS
Info("Mot de passe correct")
SINON
Info("Mot de passe incorrect.")
FIN
Registered member
130 messages
Popularité : +0 (4 votes)
Posted on March, 16 2020 - 11:46 AM
Je suis sur la 25, mais je ne pense pas que ça change quelque chose ou du moins, je n' espère pas. Vous mettez tout votre code dans une même page ? Car pour moi, ça ne marche toujours pas, ni pour la configuration initiale, ni pour la dernière avec le test "à chaud" :/
Registered member
473 messages
Popularité : +20 (20 votes)
Posted on March, 16 2020 - 12:56 PM
Si ca peut être un bug 25.
Pour verifier tu crees un nouveau projet avec une fenetre qui contient juste un champ de saisie et un bouton
Tu colles le code que jai donné dans le bouton et tu testes si tu as encore ton message d'erreur c'est lié a la 25
Registered member
130 messages
Popularité : +0 (4 votes)
Posted on March, 16 2020 - 1:00 PM
anonyme a écrit :
> Je suis sur la 25, mais je ne pense pas que ça change quelque chose ou du moins, je n' espère pas. Vous mettez tout votre code dans une même page ? Car pour moi, ça ne marche toujours pas, ni pour la configuration initiale, ni pour la dernière avec le test "à chaud" :/

Complètement oublié la clé... Et pourtant, ce n' est pas faute d' avoir lu et relu le message d' erreur :/ Du coup, j' ai renseigné aussi la clé dans le .ini et ça marche. Mais est-ce la bonne solution ? L' idéal ne serait-il pas d' isoler la clé du mdp au cas où ? Ça devrait faire l' objet d' une petite réflexion de ma part... En tout cas merci stef, pour le coup de main :merci: