PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WEBDEV 2024 → Cryptage / Décryptage ...
Cryptage / Décryptage ...
Started by kick71, Jul., 30 2020 8:12 AM - 19 replies
Registered member
874 messages
Popularité : +39 (51 votes)
Posted on July, 30 2020 - 8:12 AM
Bonjour à tous,

Je dois crypter des zones dites sensibles ( RGPD / Mdp / Infos bancaires ) dans des rubriques de fichiers HFCS ( Serveur ).
Ces rubriques sont au format Texte.

J'utilise 2 petites procédures, en apparence simple, mais lors du décryptage, cela ne passe pas et renvoie toujours une chaîne vide. Le cryptage semble bon ( pas d'erreur ).

Ci-joint mes 2 procédures. Si vous aviez une idées lumineuse pour corriger le décryptage ? Un pb de format en binaire et chaîne peu être ?

Un grand merci pour votre aide.
Courage à ceux qui ne sont pas en wac !






--
Christian - kick71
Posted on July, 30 2020 - 2:06 PM
les fonctions de cryptage retournent du binaire qui n'est pas stockable dans une zone texte.

Le plus simple est de crypter LE FICHIER ENTIER, et de hasher les mots de passe puis de les stocker en hexa ou base64
Registered member
945 messages
Popularité : +102 (110 votes)
Posted on July, 30 2020 - 3:27 PM
Bonjour
@kick71 : copiez/colller votre code plutôt qu'une image se sera plus simple pour reproduire votre problème.

Procedure CryptageValeur(lavaleur est une chaîne):Buffer
smessage est un Buffer = lavaleur
bufclef est un Buffer = HashChaîne(HA_MD5_128,"maclef")
bufcrypte est un Buffer = CrypteStandard(smessage,bufclef)
RENVOYER bufcrypte


Procedure DecrypteValeur(lavaleur est un Buffer):Buffer
bufclef est un Buffer = HashChaîne(HA_MD5_128,"maclef")
bufdecrypte est un Buffer = DécrypteStandard(lavaleur,bufclef)
RENVOYER bufdecrypte


Trace(DecrypteValeur(CryptageValeur("test"))) // affche test


@Argus : une chaine peut très bien contenir des cractères dit "non imprimable"
maChaine est une chaîne = CryptageValeur("test")
Trace(maChaine) // affiche : 0+BG\Õ³û·®1&ìóÞ¤ÒÅrwBŠHö¾{?ÅÊy
myBuffer est un Buffer = maChaine
maChaine = DecrypteValeur(myBuffer)
Trace(maChaine) // affiche : test


--
« L'erreur ne devient pas vérité parce qu'elle se propage et se multiplie ; la vérité ne devient pas erreur parce que nul ne la voit. » Gandhi
Posted on July, 30 2020 - 7:54 PM
caractères non imprimables, oui, ZERO BINAIRE non, c'est la fin de chaine... et dans une chaine cryptée, à un moment ou à un autre, on va avoir un zéro binaire qui va nous faire perdre le reste des infos, d'ou le problème décrit.

Ce n'est pas pour rien que les fonctions de cryptages donnent leur résultat comme un BUFFER et pas une chaine.
Registered member
874 messages
Popularité : +39 (51 votes)
Posted on July, 31 2020 - 8:29 AM
Bonjour Argus et Philippe,
Merci pour vos réponses.


Quand je fais le cryptage et décryptage dans un même code oui, cela fonctionne et fonctionnais déjà avant.
Mais quand je test sur une page de test les deux fonctions le décryptage ne fonctionne pas ! C'est bien la mon, soucis depuis le départ.





--
Christian - kick71
Registered member
121 messages
Popularité : +8 (14 votes)
Posted on July, 31 2020 - 9:56 AM
Bonjour,
début de piste

Est ce que votre problème vient quand vous allez chercher la chaîne cryptée dans votre base et que vous voulez la décrypter ?
Si oui vérifier la taille de la rubrique qui stock votre chaîne car celle-ci n'est peut-être pas complète.

--
Bon dev

Thibault
Registered member
874 messages
Popularité : +39 (51 votes)
Posted on July, 31 2020 - 10:12 AM
Bonjour Thibault,
Dois-je la définir en Memo ? ou une taille définie ?

--
Christian - kick71
Registered member
874 messages
Popularité : +39 (51 votes)
Posted on July, 31 2020 - 10:14 AM
Dans ma page de test, les zones de saisies n'ont pas de taille prédéfinies et cela ne fonctionne pas non plus

--
Christian - kick71
Registered member
121 messages
Popularité : +8 (14 votes)
Posted on July, 31 2020 - 7:12 PM
Bonsoir, juste la taille dans la base et est ce que les champs sont de type mot de passe ?

--
Bon dev

Thibault
Registered member
1,603 messages
Popularité : +64 (70 votes)
Posted on August, 01 2020 - 9:13 AM
Bonjour,

HFSQL permet des rubriques de type mémo binaire. A tester pour stocker ces données...

--
Cordialement
François
Registered member
945 messages
Popularité : +102 (110 votes)
Posted on August, 01 2020 - 5:00 PM
Bonjour
@ Argus : Après la lecture de votre message je me suis traité d'idiot pour ne pas avoir pensé au 0x00.
Pourtant je n'ai jamais eu de problème alors je me suis livré à ce petit test
UneChaine est une chaîne = "ABC"+Caract(0x0)+"DEF"
Trace(UneChaine) // Affiche "ABC" et c'est normal
Trace(Taille(UneChaine)) // Affiche 7 alors que je m'attendais à 3
UneAutreChaine est une chaîne = UneChaine
Trace(Taille(UneAutreChaine)) // Affiche 7 et UneAutreChaine contient bien "ABC"+Caract(0x0)+"DEF"

Une explication ?

--
« L'erreur ne devient pas vérité parce qu'elle se propage et se multiplie ; la vérité ne devient pas erreur parce que nul ne la voit. » Gandhi
Registered member
213 messages
Popularité : +12 (12 votes)
Posted on August, 02 2020 - 3:51 AM
Bonsoir,

Ma version, qui fonctionne pour ce que j'ai eu à traiter jusqu'à maintenant.
Je sauvegarde les données cryptées sous leur format HEXA.

Dans mon cas, ce sont des paramètres système stockés dans un fichier texte.
J'assume qu'une rubrique TEXTE aura le même comportement.

De mémoire, la transition vers UNICODE a résolu mes problèmes.
De mémoire...

Deux procédures globales que je lance à la volée selon les besoins.


Procedure GlbSecCrypte(pChaîneÀCrypter est une chaîne = "", pCléCryptage est une chaîne = "")
//
//--- Validations
SI pCléCryptage = "" ALORS RENVOYER ""
//
//--- Passe en UNICODE
uCléUNI est un Buffer = AnsiVersUnicode(pChaîneÀCrypter)
//
//--- Génère la séquence numérique de la clé
uCléPwd est un Buffer = HashChaîne(HA_MD5_128, AnsiVersUnicode(pCléCryptage))
//
//--- Crypte la chaîne selon sa clé
uCléCry est un Buffer = CrypteStandard(uCléUNI, uCléPwd, crypteAES128)
//
//--- Retourne la chaîne cryptée sous forme HEXA
RENVOYER BufferVersHexa(uCléCry, SansRegroupement)
//
//--- EOF


Procedure GlbSecDécrypte(pChaîneÀDécrypter est une chaîne = "", pCléDéCryptage est une chaîne = "")
//
//--- Validations
SI pChaîneÀDécrypter = "" OU pCléDéCryptage = "" ALORS RENVOYER ""
//
//--- Retourne la chaîne crypté sous son format original
uCléCry est un Buffer = HexaVersBuffer(pChaîneÀDécrypter)
//
//--- Génère la séquence numérique de la clé
uCléPwd est un Buffer = HashChaîne(HA_MD5_128, AnsiVersUnicode(pCléDéCryptage))
//
//--- Décrypte la chaîne selon sa clé
uCléTxt est un Buffer = DécrypteStandard(uCléCry, uCléPwd, crypteAES128)
//
//--- Retourne la clé sous sa forme originale
RENVOYER UnicodeVersAnsi(uCléTxt)
//
//--- EOF


Bon Dev.

Serge

--
-----
Parfois, la logique est implacable...
Posted on August, 03 2020 - 3:21 PM
pas d'explication, non... mais j'ai constaté depuis longtemps que tant qu'on est :
- dans le même code
- en windev

on peut effectivement avoir un zero binaire qui ne pose pas problème dans une chaine (crypter et décrupter dnas une chaine, par exemple)

Par contre, dés qu'on commence à enregistrer, transférer, passer en paramètre et toute cette sorte de choses, ou changer d'environnement (mobile et autre) on perd ce qui est après le zero binaire.

C'est trompeur, et ca m'a fais rentrer dans le même mur il y a longtemps... Maintenant je sais ou est le mur et je contourne :-)
Registered member
945 messages
Popularité : +102 (110 votes)
Posted on August, 03 2020 - 11:35 PM
Bonjour
Effectivement c'est louche cette gestion du type chaine car ce code est parfaitement valide
UneChaine est une chaîne = "ABC" + Caract(0x0) + "DEF" + Caract(0x0) + "GHI"
Trace(ExtraitChaîne(UneChaine, 2, Caract(0x0))) // et renvoi bien "DEF"



Argus a écrit :
pas d'explication, non... mais j'ai constaté depuis longtemps que tant qu'on est :
- dans le même code
- en windev

on peut effectivement avoir un zero binaire qui ne pose pas problème dans une chaine (crypter et décrupter dnas une chaine, par exemple)

Par contre, dés qu'on commence à enregistrer, transférer, passer en paramètre et toute cette sorte de choses, ou changer d'environnement (mobile et autre) on perd ce qui est après le zero binaire.

C'est trompeur, et ca m'a fais rentrer dans le même mur il y a longtemps... Maintenant je sais ou est le mur et je contourne


--
« L'erreur ne devient pas vérité parce qu'elle se propage et se multiplie ; la vérité ne devient pas erreur parce que nul ne la voit. » Gandhi
Registered member
874 messages
Popularité : +39 (51 votes)
Posted on August, 04 2020 - 9:26 AM
Bonjour Monsieur Serge

J'ai adapté mon code, en fonction du votre pour le cryptage/décryptage.
Cela passe mieux, enfin un peu plus loin, je m'explique.

Ces zones que je dois crypter et décrypter sont ensuite stockées dans un fichier HFCS.
Le cryptage comme d'habitude ne pose aucun Pb, mais lors du décryptage ( récupération du fichier HFCS ), j'ai un soucis sur une rubrique ( IBAN ).

Je ne sais pas si le pb vient de la longueur de la rubrique stockée ou du typage.
Celle-ci comme les autres sont de type chaîne, avec taille 150.

Lors du décryptage, j'ai le message suivant :





Une idée de votre part ?

Merci par avance.
Si pas de soluce je vais voir à utiliser une autre méthode de cryptage que celle fournie par PCSOFT

--
Christian - kick71
Registered member
874 messages
Popularité : +39 (51 votes)
Posted on August, 04 2020 - 10:02 AM
Après test, le passage en "memo texte" semble résoudre mon pb !

--
Christian - kick71
Registered member
213 messages
Popularité : +12 (12 votes)
Posted on August, 06 2020 - 5:20 AM
@kick71,

La longueur totale de la chaîne cryptée peut facilement dépasser les 150 caractères.
Le mémo texte semble d'ailleurs confirmer que c'était votre cas.

Un "Taille" sur la chaîne reçue au retour du cryptage le confirmerait.

------------------------------
À noter (1):
Le zéro binaire (0x0) auquel Argus et Philippe Pasquali font référence ne passe pas avec mes procédures.
J'ai testé en codant la valeur "en dur" pour confirmer.

Pour ce qui est de mes besoins à moi ça ne cause pas de soucis.
La qualité de l'information est validée avant le cryptage.

À vous de voir si c'est un problème potentiel de votre côté.

------------------------------
À noter (2):
Ma procédure permet de crypter une chaîne à blanc ("").
Encore ici, une fonctionnalité qui répond à mes besoins.

À vous de voir si c'est un problème potentiel de votre côté.

Bon dev.

Serge

--
-----
Parfois, la logique est implacable...
Registered member
1,287 messages
Popularité : +20 (72 votes)
Posted on August, 13 2020 - 11:30 AM
Bonjour

Ce que j'utilise souvent après un cryptage, c'est l'encode64

pour avoir toujours des caractères lisibles

--
Bertin CARRIERE - SPRL RGPD.Zen-Project.be
bertin.carriere@gmail.com
http://www.zen-project.be http://www.linkedin.com/in/bertincarriere

Belgique +32(0)2/318.02.67
France +33(0)3/66.722.542
Espagne +34.5/12.702.266

http://www.be-dev.be
Registered member
1,603 messages
Popularité : +64 (70 votes)
Posted on August, 13 2020 - 11:56 AM
Bonjour

Il est conseillé aussi d'activer la sécurité renforcée sur les fichiers et de choisir un mode de cryptage fort.

Vous pouvez en plus utiliser votre procédure de cryptage/décryptage.

https://doc.pcsoft.fr/fr-FR/?1000017310&name=base_hfsql_clientserveur_recommandations_securite

--
Cordialement
François
Registered member
874 messages
Popularité : +39 (51 votes)
Posted on August, 13 2020 - 12:26 PM
Oui François, les fichiers seront cryptés aussi ...
Merci

A suivre

--
Christian - kick71