Page 1 sur 1
[R] Décrypter
Posté : dim. 18 déc. 2016 13:59
par Amesamana
Bonjour,
j'ai besoin d'une lumière
Je code un petit outil pour enregistrer des données dans un fichier .txt et que je crypte.
Ces données son à chaque fois sur trois lignes.
Je crypte ces données et je veux pouvoir les décrypter, jusqu'à là pas de soucis.
Mon soucis et que si je rentre une nouvelle donnée de trois lignes cette deuxième saisies n'est pas décryptées ?
Par exemple première saisie (Age, nom, ville)
28
Florence
Paris
Ce qui donne dans mon fichier texte
n˜…
KpÎÉ›E(X°!S¤â=”d3j‹ÔyoaƒlÄš:†!}ÿƒ€×©†ê6’ÕE)Ž›jIn˜…
KpÎÉ›E(X°!S¤â=”d3j‹ÔyoaƒlÄš:†!}ÿƒ€×©†ê6’ÕE)Ž›jI¡®¾ôKMY‹.Žo¢àh¿àœ\·jp;Ð6mÛiPˆ±î0q½,ãJ¦P%sƒ) _-j©Lë^ñ*
Je peux donc crypter et afficher le résultat décrypté jusqu'à la pas de soucis
Ensuite si je rentre :
32
Maxime
Marseille
J'obtiens :
Age : 28
Prénom : Florence
Ville : Paris
êÄäj8ÑÊmÞÍÅ:ù7Ø/)¨~¹‘Ãêž³EW|øF^ï
¸/ÌÈF~ã‡IïÍ=å«X6]ŽÛ‡‹¹êõ¹U>²ö#ì+BWðºa‰Òä;-½´[ŠòÑP멵'†DíBÞÀßTcDB
Voici un exemple :
#include <Crypt.au3>#include <GUIConstantsEx.au3>#include <ButtonConstants.au3>#include <EditConstants.au3>#include <WindowsConstants.au3>Global $FIHCHIER = @HomeDrive & "\test.txt"Global $Val1 = 'A toi de choisir'Global $FIHC#Region ### START Koda GUI section ### Form=$Form1 = GUICreate("Form1", 615, 396, 192, 124)$Input1 = GUICtrlCreateInput("", 16, 24, 153, 21)$Input2 = GUICtrlCreateInput("", 16, 56, 153, 21)$Input3 = GUICtrlCreateInput("", 16, 88, 153, 21)$bt_crypter = GUICtrlCreateButton("Crypter", 16, 136, 153, 25)$bt_decrypt = GUICtrlCreateButton("Affciher", 16, 184, 153, 25)$Edit1 = GUICtrlCreateEdit("", 192, 8, 401, 369)GUICtrlSetData(-1, "")GUISetState(@SW_SHOW)#EndRegion ### END Koda GUI section ###While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $bt_crypter Local $readD1 = GUICtrlRead($Input1) Local $readD2 = GUICtrlRead($Input2) Local $readD3 = GUICtrlRead($Input3) $FIHC &= "************" & @CRLF $FIHC &= "Age : " $FIHC &= $readD1 & @CRLF $FIHC &= "Prénom : " $FIHC &= $readD2 & @CRLF $FIHC &= "Ville : " $FIHC &= $readD3 & @CRLF Local $sEncrypted = StringEncrypt
(True, $FIHC, $Val1) FileWrite($FIHCHIER, $sEncrypted) Case $bt_decrypt Local $rREADF = FileRead($FIHCHIER) Local $sDecrypted = StringEncrypt
(False, $rREADF, $Val1) MsgBox(0, "", $sDecrypted) GUICtrlSetData($Edit1, $sDecrypted) EndSwitchWEndFunc StringEncrypt
($bEncrypt, $sData, $sPassword) _Crypt_Startup() ; Exécute la bibliothèque Crypt. Local $sReturn = '' If $bEncrypt Then ; Si l'indicateur est défini à True alors chiffrer, sinon déchiffrer. $sReturn = _Crypt_EncryptData($sData, $sPassword, $CALG_RC4) Else $sReturn = BinaryToString(_Crypt_DecryptData($sData, $sPassword, $CALG_RC4)) EndIf _Crypt_Shutdown() ; Arrête la bibliothèque Crypt. Return $sReturnEndFunc ;==>StringEncrypt
Merci.
Re: [..] Décrypter
Posté : dim. 18 déc. 2016 16:16
par orax
Il faut utiliser _Crypt_EncryptData sur l'ensemble des données, pas seulement sur celles qui viennent d'être ajoutées. Voir les commentaires.
#include <Crypt.au3>#include <GUIConstantsEx.au3>#include <ButtonConstants.au3>#include <EditConstants.au3>#include <WindowsConstants.au3>Global $FIHCHIER = @HomeDrive & "\test.txt"Global $Val1 = 'A toi de choisir'Global $FIHC#Region ### START Koda GUI section ### Form=$Form1 = GUICreate("Form1", 615, 396, 192, 124)$Input1 = GUICtrlCreateInput("", 16, 24, 153, 21)$Input2 = GUICtrlCreateInput("", 16, 56, 153, 21)$Input3 = GUICtrlCreateInput("", 16, 88, 153, 21)$bt_crypter = GUICtrlCreateButton("Crypter", 16, 136, 153, 25)$bt_decrypt = GUICtrlCreateButton("Affciher", 16, 184, 153, 25)$Edit1 = GUICtrlCreateEdit("", 192, 8, 401, 369)GUICtrlSetData(-1, "")GUISetState(@SW_SHOW)#EndRegion ### END Koda GUI section ###While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $bt_crypter Local $readD1 = GUICtrlRead($Input1) Local $readD2 = GUICtrlRead($Input2) Local $readD3 = GUICtrlRead($Input3) ; on lit et déchiffre le contenu du fichier $hfile = FileOpen($FIHCHIER, $FO_BINARY) $FIHC = StringEncrypt
(False, FileRead($hfile), $Val1) FileClose($hfile) $FIHC &= "************" & @CRLF $FIHC &= "Age : " $FIHC &= $readD1 & @CRLF $FIHC &= "Prénom : " $FIHC &= $readD2 & @CRLF $FIHC &= "Ville : " $FIHC &= $readD3 & @CRLF ; on rechiffre TOUT le contenu (pas seulement ce qui a été ajouté) Local $sEncrypted = StringEncrypt
(True, $FIHC, $Val1) $hfile = FileOpen($FIHCHIER, $FO_OVERWRITE + $FO_BINARY) FileWrite($hfile, $sEncrypted) FileClose($hfile) Case $bt_decrypt $hfile = FileOpen($FIHCHIER, $FO_BINARY) Local $rREADF = FileRead($hfile) FileClose($hfile) Local $sDecrypted = StringEncrypt
(False, $rREADF, $Val1) MsgBox(0, "", $sDecrypted) GUICtrlSetData($Edit1, $sDecrypted) EndSwitchWEndFunc StringEncrypt
($bEncrypt, $sData, $sPassword) _Crypt_Startup() ; Exécute la bibliothèque Crypt. Local $sReturn = '' If $bEncrypt Then ; Si l'indicateur est défini à True alors chiffrer, sinon déchiffrer. $sReturn = _Crypt_EncryptData($sData, $sPassword, $CALG_RC4) Else $sReturn = BinaryToString(_Crypt_DecryptData($sData, $sPassword, $CALG_RC4)) EndIf _Crypt_Shutdown() ; Arrête la bibliothèque Crypt. Return $sReturnEndFunc ;==>StringEncrypt
Re: [..] Décrypter
Posté : dim. 18 déc. 2016 16:45
par Amesamana
super

Merci Orax
Re: [..] Décrypter
Posté : ven. 30 déc. 2016 11:50
par Amesamana
Bonjour,
je reprends cette exemple pour une demande.
j'ai ma liste de créé comme ceci par exemple.
************
Prénom : Maxime
Age : 26
Ville : Paris
************
Prénom : Florence
Age : 32
Ville : Marseille
************
Prénom : Zoe
Age : 43
Ville : Lyon
************
Prénom : Alain
Age : 21
Ville : Bordeaux
Je voudrais pourvoir la trier par ordre alphabétique des prénoms.
_ArrayDisplay et _ArraySort devrait faire l'affaire mais je ne trouve pas comment !
Merci.
Re: [..] Décrypter
Posté : ven. 30 déc. 2016 12:11
par Tlem
Bonjour Amesamana
Pour pouvoir faire ce que vous demandez, vous allez devez construire un tableau à 2 dimensions (Prénom, Age, Ville) puis effectuer le tri sur la colonne désiré.
D'après ce que j'ai lu des messages précédents, vous devez lire et décrypter les données de votre fichier.
Ensuite vous devrez mettre les données décryptées dans le tableau 2D.
Puis vous devrez trier le tableau sur la colonne désirée.
Enfin vous devrez lire les données triées pour reconstruire votre fichier et re-crypter le tout ...
Re: [R] Décrypter
Posté : ven. 30 déc. 2016 19:35
par Amesamana
Bonjour Tlem,
Merci pour la réponse et la ligne à suivre.
Bon je commence pas très bien ! Je ne comprends pas pourquoi ceci ne fonctionne pas.
Dans ce tab.txt les données ci-dessus.
#include <Array.au3>#include <File.au3>Global $TabGlobal $MFichier = 'C:\tab.txt'_FileReadToArray($MFichier, $Tab) ; Affichage du tableau toute mes données sont sur une colonne_ArrayDisplay($Tab, 'Test')Global $Tab2D[$Tab[0]][5]For $i = 1 To $Tab[0] Local $aMiniTableau = StringSplit($Tab[$i], ":") $Tab2D[$i-1][0] = $aMiniTableau[1] $Tab2D[$i-1][1] = $aMiniTableau[2] $Tab2D[$i-1][2] = $aMiniTableau[3] $Tab2D[$i-1][3] = $aMiniTableau[4]Next_ArrayDisplay($Tab2D, 'Tableau2') ; Affichage du tableau2D mais rien ne s'affiche ?_ArraySort($Tab2D, 0, 0, 0, 2); tri colonne 2
Re: [R] Décrypter
Posté : sam. 31 déc. 2016 12:27
par Tlem
Bonjour Amesamana.
Voici une des nombreuses méthodes possibles :
#include <Array.au3>#include <File.au3>Global $TabGlobal $MFichier = 'tab.txt'_FileReadToArray($MFichier, $Tab) ; Mise en tableau des données du fichier tab.txt_ArrayDisplay($Tab, 'Tableau des données') ; Affichage du tableau des données sur une colonne; Ici, on calcule le nombre de ligne nécessaires pour construire le tableau 2D.; On prends le nombre total de ligne du tableau $Tab et on le divise par 4 (puisque vous avez 4 lignes par personne).; Soit : Ubound($Tab)/4; Puisque l'on veux faire un tableau 2D avec 3 colonnes et Ubound($Tab)/4 lignes, on fait :Global $Tab2D[UBound($Tab) / 4][3]_ArrayDisplay($Tab2D, 'Tableau2D vide') ; Affichage du tableau2D vide; Maintenant, nous allons peupler les cases. ^^; On va lire le tableau $Tab qui contient successivement la ligne des étoiles, un prénom, un age, une ville,; puis on recommence la ligne des étoiles, un prénom, un age, une ville, etc ...$Tab2DLine = 0 ; Initialisation de la valeur de la première ligne du tableau à peuplerFor $i = 1 To UBound($Tab) - 1 Step 4 ; Lecture du tableau $Tab par pas de 4 ; On commence par vérifier que la première ligne soit celle avec les étoiles. If $Tab[$i] = "************" Then ; Ensuite on récupère la ligne Prénom, puis Age et enfin la Ville $Tab2D[$Tab2DLine][0] = StringTrimLeft($Tab[$i + 1], 9 ) ; Prénom $Tab2D[$Tab2DLine][1] = StringTrimLeft($Tab[$i + 2], 6 ) ; Age $Tab2D[$Tab2DLine][2] = StringTrimLeft($Tab[$i + 3], 8 ) ; Ville $Tab2DLine += 1 ; On rajoute 1 pour passer à la ligne suivant EndIfNext_ArraySort($Tab2D, 0, 0, 0, 1); tri sur l'Age_ArrayDisplay($Tab2D, 'Tri sur Age') ; Affichage du tableau2D_ArraySort($Tab2D, 0, 0, 0, 0); tri le nom1_ArrayDisplay($Tab2D, 'Tri sur Nom') ; Affichage du tableau2D
Maintenant, je ne vois pas vraiment l’intérêt de réécrire dans votre fichier de données la désignation de chaque élément.
Ceci devrait suffire :
************
Maxime
26
Paris
************
Prénom : Florence
32
Marseille
************
Prénom : Zoe
43
Lyon
************
Prénom : Alain
21
Bordeaux
et dans ce cas il suffira de remplacer :
par
$Tab2D[$Tab2DLine][0] = $Tab[$i + 1] ; Prénom
$Tab2D[$Tab2DLine][1] = $Tab[$i + 2] ; Age
$Tab2D[$Tab2DLine][2] = $Tab[$i + 3] ; Ville
Re: [R] Décrypter
Posté : sam. 31 déc. 2016 13:24
par Amesamana
Bonjour Tlem,
merci pour ces explications
Alors je ne pige pas car le tableau tri sur l'Age et tri sur Nom n’affiche rien, ils restent vide.
J'ai bien compris grâce à vos explications la démarche à suivre et je comprends que l'inscription se fait grâce à la boucle For.
Pourquoi celle-ci ne retourne pas les données ?
Je bosse dessus !
Merci.
[Edit]
Désolé Tlem un soucis d'espace dans le fichier test Tab.txt.
Cela fonctionne très bien !
Merci pour ces explications.
Bonne journée et bonnes fêtes de fin d'année.
Re: [R] Décrypter
Posté : jeu. 05 janv. 2017 20:18
par Amesamana
Bonsoir,
Bon je voulais trouver cette explication/solution par moi même mais je n'y parviens pas !
Quand je fais mon tri et que je veux entrer de nouvelles données et que je sélectionne le tri mon tableau 1D ne s'affiche plus et mon 2D est bien vide !?
Case $bt_trier GUICtrlSetData($Edit1, ""); On vide GUICtrlCreateEdit Sleep(200); juste pour s'assurer visuellement de l'action FileOpen($stabFic, $FO_OVERWRITE); ouvre le fichier avec le paramètre d'écriture (efface le contenu précédent en cas de nouvelle données) FileWrite($stabFic, $sDecrypted) ; Ecrit dans le fichier le décryptage _FileReadToArray($stabFic, $Tab) ; Mise en tableau des données du fichier tab.txt _ArrayDisplay($Tab, "") ; Affiche le tableau Global $Tab2D[UBound($Tab) / 4][4] ; déclare le tableau 4 colonnes 4 lignes $Tab2DLine = 0 ; Initialisation de la valeur de la première ligne du tableau à peupler For $i = 1 To UBound($Tab) - 1 Step 4 ; Lecture du tableau $Tab par pas de 4 ; On commence par vérifier que la première ligne soit celle avec les étoiles. If $Tab[$i] = "************" Then ; Ensuite on récupère la ligne Prénom, puis Age et enfin la Ville $Tab2D[$Tab2DLine][0] = "************" ; on réinscrit $Tab2D[$Tab2DLine][1] = $Tab[$i + 1] ; Prénom $Tab2D[$Tab2DLine][2] = $Tab[$i + 2] ; Age $Tab2D[$Tab2DLine][3] = $Tab[$i + 3] ; Ville $Tab2DLine += 1 ; On rajoute 1 pour passer à la ligne suivant EndIf Next _ArraySort($Tab2D, 0, 0, 0, 1) ; tri le prénom _FileWriteFromArray($stabFic, $Tab2D) _ArrayDisplay($Tab2D, "") $rtxt = FileRead($stabFic) $txt2 = StringReplace($rtxt, '|', @CRLF) ; on remplace le pipe par un chariot FileWrite($stabFic2, $txt2) ; on écrit le résultat dans le fichier $rresult = FileRead($stabFic2) ; on lit le fichier GUICtrlSetData($Edit1, "") ; On vide GUICtrlCreateEdit GUICtrlSetData($Edit1, $rresult) ; on inscrit dans GUICtrlCreateEdit FileClose($stabFic2) ; on ferme FileDelete($stabFic2) ; on ferme FileClose($stabFic) ; on supprime FileDelete($stabFic) ; on supprime save
() ; on enregistre;~ RestartScript() ; on évite le fameux plantage qui donne envie de taper la tête sur le mur :) Chose qui ne me va pas car cela oblige dns l'outil de saisir à nouveau le mot de passe.
Merci.
Re: [R] Décrypter
Posté : ven. 06 janv. 2017 22:04
par walkson
Bonjour,
C'est très gentil d'économiser la place sur le forum en mettant vos posts à la suite, je suis sûr que Tlem (le Boss) y sera très sensible mais quant à la lecture de vos problèmes, je crains que sur un sujet résolu qui, plus est, n'a rien à voir avec "Décrypter" que vous obteniez quelques réponses. Je vous conseille fortement de créer un nouveau sujet mais c'est un avis qui n'engage que moi.
Une petite remarque sur votre code
venu tout droit de l'aide
$sFilePath = @TempDir & "\FileWrite.txt"
Local $hFileOpen = FileOpen($sFilePath, $FO_APPEND)
FileWrite($hFileOpen, "Line 2")
venu tout droit de votre code
FileOpen($stabFic, $FO_OVERWRITE)
FileWrite($stabFic, $sDecrypted)
Re: [R] Décrypter
Posté : sam. 07 janv. 2017 12:57
par Amesamana
Bonjour,
Effectivement ! J'ai pourtant hésiter mais étant donnée la présence de la réponse de Tlem sur le tri j'ai pensé que c'était mieux.
Mais tu as raison !
Au final j'y suis arrivé et tout simplement avec
Local $hFileOpen = FileOpen($stabFic, 2)
et déplacé
FileDelete($stabFic) ; on supprime
sous
Case $GUI_EVENT_CLOSE
Case $bt_trier GUICtrlSetData($Edit1, "") ; On vide GUICtrlCreateEdit Sleep(100) ; juste pour s'assurer visuellement de l'action Local $hFileOpen = FileOpen($stabFic, 2) If $hFileOpen = -1 Then MsgBox($MB_SYSTEMMODAL, "", "Une erreur est survenue pendant la lecture du fichier.") EndIf FileWrite($hFileOpen, $sDecrypted) ; Ecrit dans le fichier le décryptage _FileReadToArray($stabFic, $Tab) ; Mise en tableau des données du fichier tab.txt _ArrayDisplay($Tab, "") ; Affiche le tableau Global $Tab2D[UBound($Tab) / 4][4] ; déclare le tableau 4 colonnes 4 lignes $Tab2DLine = 0 ; Initialisation de la valeur de la première ligne du tableau à peupler For $i = 1 To UBound($Tab) - 1 Step 4 ; Lecture du tableau $Tab par pas de 4 ; On commence par vérifier que la première ligne soit celle avec les étoiles. If $Tab[$i] = "************" Then ; Ensuite on récupère la ligne Prénom, puis Age et enfin la Ville $Tab2D[$Tab2DLine][0] = "************" ; on réinscrit $Tab2D[$Tab2DLine][1] = $Tab[$i + 1] ; Prénom $Tab2D[$Tab2DLine][2] = $Tab[$i + 2] ; Age $Tab2D[$Tab2DLine][3] = $Tab[$i + 3] ; Ville $Tab2DLine += 1 ; On rajoute 1 pour passer à la ligne suivant EndIf Next _ArraySort($Tab2D, 0, 0, 0, 1) ; tri le prénom _FileWriteFromArray($stabFic, $Tab2D) _ArrayDisplay($Tab2D, "") $rtxt = FileRead($stabFic) $txt2 = StringReplace($rtxt, '|', @CRLF) ; on remplace le pipe par un chariot FileWrite($stabFic2, $txt2) ; on écrit le résultat dans le fichier $rresult = FileRead($stabFic2) ; on lit le fichier GUICtrlSetData($Edit1, "") ; On vide GUICtrlCreateEdit GUICtrlSetData($Edit1, $rresult) ; on inscrit dans GUICtrlCreateEdit FileClose($stabFic2) ; on ferme FileDelete($stabFic2) ; on supprime FileClose($stabFic) ; on ferme save
() ; on enregistre
Merci.