[R]enregistrer login et mot de passe dans un fichier à part

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
magique
Niveau 4
Niveau 4
Messages : 61
Enregistré le : lun. 09 août 2010 11:28
Status : Hors ligne

[R]enregistrer login et mot de passe dans un fichier à part

#1

Message par magique »

Bonjour à tous,

Je suis occupé à créer une interface pour que les utilisateurs puisse enregistrer leurs différent login et mot de passe afin qu'il puisse lancer les différents programmes dont ils on besoin sans devoir taper ceux-ci à chaque fois

j'ai commencer par créer l'interface mais je me heurte à un souci, comment je peu faire pour que lorsque l'utilisateur sélectionne le nom d'un programme celui-ci s'inscrit dans un fichier à part exemple:

programme1 (nom du programme)
tartempion (login)
password123 (mot de passe)

programme2 (nom du programme)
tartuffe (login)
password321 (mot de passe)

et ainsi de suite

ce que je verrais mais je suis ouvert à toute suggestion serai d'ouvrir un fichier genre TXT en invisible,
l'enregistrer sous le nom X.TXT (ou autre) sans que l'utilisateur le sache
le faire aller à un endroit défini qui ne soit pas trouvable facilement sur le disque C:\
le tout pour que plus tard quand l'utilisateur sélectionnera le programme qu'il veux ouvrir, celui-ci s'ouvre sans qu'il ai a taper son login et mot de passe

voici ou j'en suis dans le code (je sais c'est pas beaucoup dsl)
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Crypt.au3>
#include <File.au3>

#Region ### START Koda GUI section ### Form=C:\Users\Administrateur\Desktop\Form1.kxf
Global $Form1 = GUICreate("Form1", 357, 294, 192, 124)
Global $Label3 = GUICtrlCreateLabel("Enregistrez vos identifiants", 56, 32, 252, 49)
Global $Label4 = GUICtrlCreateLabel("Sélectionnez le programme", 48, 88, 120, 40)
Global $Combo1 = GUICtrlCreateCombo("", 144, 88, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "programme1|MAIL|programme3|programme4|programme5");nom mis dans la picklist
Global $Label1 = GUICtrlCreateLabel("Login :", 48, 136, 76, 17)
Global $Input1 = GUICtrlCreateInput("", 144, 128, 121, 21); input login
Global $Label2 = GUICtrlCreateLabel("Password :", 48, 168, 76, 17)
Global $Input2 = GUICtrlCreateInput("", 144, 160, 121, 21); input password
Global $Button1 = GUICtrlCreateButton("Valider", 152, 208, 75, 25)
Global $Button2 = GUICtrlCreateButton("Annuler", 240, 208, 75, 25)

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
  Case $GUI_EVENT_CLOSE
   Exit

 EndSwitch
WEnd
Modifié en dernier par magique le jeu. 14 mai 2020 11:15, modifié 1 fois.

Avatar du membre
Nine
Niveau 2
Niveau 2
Messages : 22
Enregistré le : ven. 17 avr. 2020 01:23
Status : Hors ligne

Re: enregistrer login et mot de passe dans un fichier à part

#2

Message par Nine »

Pourquoi ne pas simplement encrypter le fichier, plutôt que de tenter de le cacher quelque part sur le disque. Ça me semble plus robuste comme approche, non ?

magique
Niveau 4
Niveau 4
Messages : 61
Enregistré le : lun. 09 août 2010 11:28
Status : Hors ligne

Re: enregistrer login et mot de passe dans un fichier à part

#3

Message par magique »

je veux bien l'encrypter mais je doit pouvoir récupérer les login et mot de passe pour ouvrir les programmes
est-ce qu'une fois encrypter ca peu fonctionner ?

Avatar du membre
Nine
Niveau 2
Niveau 2
Messages : 22
Enregistré le : ven. 17 avr. 2020 01:23
Status : Hors ligne

Re: enregistrer login et mot de passe dans un fichier à part

#4

Message par Nine »

Bien sur. Comme ceci :

Code : Tout sélectionner

#include <Constants.au3>
#include <Crypt.au3>

Opt("MustDeclareVars", 1)

Local $sCryptKey = "MyPassWord"
Local $sFileName = "Test.bin"

; à exécuter la première fois pour créer le fichier binaire
Local $sString = FileRead("Test.txt")
Encrypt_File($sFileName, $sCryptKey, $sString)

; à exécuter en entrant dans ton script
Local $sFileContent = Decrypt_File($sFileName, $sCryptKey)
MsgBox($MB_SYSTEMMODAL, "", $sFileContent)
; tu peux modifier le contenu ici
; ne reste qu'à le réencrypter si modif ont eu lieu
Encrypt_File($sFileName, $sCryptKey, $sFileContent)

Func Decrypt_File($FileName, $vCryptKey)
  Local $hFile, $vContent, $sCrypt

  $hFile = FileOpen($FileName, $FO_BINARY)
  $vContent = FileRead($hFile)
  FileClose($hFile)
  Local $sCrypt = _Crypt_DecryptData($vContent, $vCryptKey, $CALG_RC2, True)
  If @error Then Return ConsoleWrite("Error Decrypting " & $FileName & " with error " & @error & @CRLF)
  Local $sValue = BinaryToString($sCrypt)
  Return $sValue
EndFunc   ;==>Decrypt_File

Func Encrypt_File($FileName, $vCryptKey, $sFileContent)
  Local $hFile, $sCrypt

  $sCrypt = _Crypt_EncryptData($sFileContent, $vCryptKey, $CALG_RC2, True)
  If @error Then Return ConsoleWrite("Error Encrypting " & $FileName & " with error " & @error & @CRLF)
  $hFile = FileOpen($sFileName, $FO_OVERWRITE + $FO_BINARY)
  FileWrite($hFile, $sCrypt)
  FileClose($hFile)
EndFunc   ;==>Encrypt_File

magique
Niveau 4
Niveau 4
Messages : 61
Enregistré le : lun. 09 août 2010 11:28
Status : Hors ligne

Re: enregistrer login et mot de passe dans un fichier à part

#5

Message par magique »

merci nine
je vais décortiquer un peu ce que tu as mis

par contre j'ai eu contact avec des collègues et amis pour voir ce qu'ils en pensaient, certain m'ont dit qu'il y avais un programme qui faisant déjà ça et en creusant un peu plus ça ne fait pas tout a fait ce qu'il faut (le programme ne lance pas le programme dont on a besoin et il se plante parfois avec les pages lancée )

ma question est la suivante est-ce que je peu continuer a utiliser mon interface mais en utilisant le programme (keepass programme gratuit) pour la gestion des login et mot de passe, j'aimerai que le programme tourne en fond quand on lance mon interface pour que ce soit transparent pour l'utilisateur

j'en demande peu être trop mais qui ne tente rien n'a rien comme on dit

Avatar du membre
Nine
Niveau 2
Niveau 2
Messages : 22
Enregistré le : ven. 17 avr. 2020 01:23
Status : Hors ligne

Re: enregistrer login et mot de passe dans un fichier à part

#6

Message par Nine »

Je ne connais pas ce programme, mais je suis du genre à limiter mes downloads, et à utiliser au maximum autoit quand je le peux. Dans ton cas, il ne s'agit que de quelques lignes de code pour lire/sauver tes données. Pourquoi faire appel à un logiciel extérieur, quand tu peux tout faire simplement avec autoit ?

Comme on dit, à courir après deux lapins, on perd son temps...(j'ai peut être pas le bon proverbe là)

magique
Niveau 4
Niveau 4
Messages : 61
Enregistré le : lun. 09 août 2010 11:28
Status : Hors ligne

Re: enregistrer login et mot de passe dans un fichier à part

#7

Message par magique »

oui tu as raison, je pensais prendre le programme pour avoir un max de sécurité, mais après coup je ne sais pas si je sais mettre le programme dans le compilable de fin, je ferai le tout en autoit (c'est juste que ça m'a fait un coup au morale de m'entendre dire qu'un programme faisait déjà ça mais après avoir creuser plus loin le programme fait bcp de connerie et je l'aurai utiliser juste pour faire des copier coller)
enfin bref

je suis encore occupé d'analyser ton code et j'avoue que c'est un peu difficile a comprendre pour moi mais je cherche les réponses (dsl je suis pas programmeur ) et comme je ne vois pas ce qui est fait en fond je suis un peu perdu dsl

Avatar du membre
Nine
Niveau 2
Niveau 2
Messages : 22
Enregistré le : ven. 17 avr. 2020 01:23
Status : Hors ligne

Re: enregistrer login et mot de passe dans un fichier à part

#8

Message par Nine »

Vois-ça comme un FileRead / FileWrite, mais dont le contenu est encrypté (donc illisible). Tu obtiens un String à la sortie de la lecture, et tu donnes un String pour l'écriture.

Le string devrait être une suite de lignes formatée de la façon dont tu veux, par ex:

Programme1|Utilisateur1|MotdePasse1@CRLF
Programme2|Utilisateur2|MotdePasse2@CRLF
Programme3|Utilisateur3|MotdePasse3@CRLF
Programme4|Utilisateur4|MotdePasse4@CRLF

De sorte que tu puisses facilement les convertir à un array 2D grâce à _ArrayAdd (en début de programme), et les remettre en string avec _ArraytoString (à la fin du programme).

ps. le @CRLF à la fin de la ligne est bien entendu virtuel.

magique
Niveau 4
Niveau 4
Messages : 61
Enregistré le : lun. 09 août 2010 11:28
Status : Hors ligne

Re: enregistrer login et mot de passe dans un fichier à part

#9

Message par magique »

toute les indications avec le $ devant c'est quoi, ce sont des nom de variable ?

magique
Niveau 4
Niveau 4
Messages : 61
Enregistré le : lun. 09 août 2010 11:28
Status : Hors ligne

Re: enregistrer login et mot de passe dans un fichier à part

#10

Message par magique »

@nine
Bonjour, je pense que j'ai mal fait l'incrustation dans mon script il me met des message d'erreur mais je comprend pas ce qu'il veux que je change
pourrais-tu m'aider stp
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Crypt.au3>
#include <File.au3>
#include <Constants.au3>


Opt("MustDeclareVars", 1)

Local $sCryptKey = "MyPassWord"
Local $sFileName = "Test.bin"

; à exécuter la première fois pour créer le fichier binaire
Local $sString = FileRead("Test.txt")
Encrypt_File($sFileName, $sCryptKey, $sString)
; à exécuter en entrant dans ton script
Local $sFileContent = Decrypt_File($sFileName, $sCryptKey)
MsgBox($MB_SYSTEMMODAL, "", $sFileContent)


#Region ### START Koda GUI section ### Form=C:\Users\Administrateur\Desktop\Form1.kxf
; tu peux modifier le contenu ici
; ne reste qu'à le réencrypter si modif ont eu lieu
Encrypt_File($sFileName, $sCryptKey, $sFileContent)
Global $Form1 = GUICreate("Form1", 357, 294, 192, 124)
Global $Label3 = GUICtrlCreateLabel("Enregistrez vos identifiants", 56, 32, 252, 49)
Global $Label4 = GUICtrlCreateLabel("Sélectionnez le programme", 48, 88, 120, 40)
Global $Combo1 = GUICtrlCreateCombo("", 144, 88, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL,$sFileName))
GUICtrlSetData(-1, "programme1|MAIL|programme3|programme4|programme5");nom mis dans la picklist
Global $Label1 = GUICtrlCreateLabel("Login :", 48, 136, 76, 17)
Global $Input1 = GUICtrlCreateInput("", 144, 128, 121, 21,($sCryptKey)); input login
Global $Label2 = GUICtrlCreateLabel("Password :", 48, 168, 76, 17)
Global $Input2 = GUICtrlCreateInput("", 144, 160, 121, 21,($sFileContent)); input password
Global $Button1 = GUICtrlCreateButton("Valider", 152, 208, 75, 25)
Global $Button2 = GUICtrlCreateButton("Annuler", 240, 208, 75, 25)

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Func Decrypt_File($FileName, $vCryptKey)
  Local $hFile, $vContent, $sCrypt

  $hFile = FileOpen($FileName, $FO_BINARY)
  $vContent = FileRead($hFile)
  FileClose($hFile)
  Local $sCrypt = _Crypt_DecryptData($vContent, $vCryptKey, $CALG_RC2, True)
  If @error Then Return ConsoleWrite("Error Decrypting " & $FileName & " with error " & @error & @CRLF)
  Local $sValue = BinaryToString($sCrypt)
  Return $sValue
EndFunc   ;==>Decrypt_File

Func Encrypt_File($FileName, $vCryptKey, $sFileContent)
  Local $hFile, $sCrypt

  $sCrypt = _Crypt_EncryptData($sFileContent, $vCryptKey, $CALG_RC2, True)
  If @error Then Return ConsoleWrite("Error Encrypting " & $FileName & " with error " & @error & @CRLF)
  $hFile = FileOpen($sFileName, $FO_OVERWRITE + $FO_BINARY)
  FileWrite($hFile, $sCrypt)
  FileClose($hFile)
EndFunc   ;==>Encrypt_File

While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
  Case $GUI_EVENT_CLOSE
   Exit

 EndSwitch
WEnd
j'ai essayer de faire au mieux mais j'ai l'impression que j'ai tout foutu en l'air sniff

Avatar du membre
Nine
Niveau 2
Niveau 2
Messages : 22
Enregistré le : ven. 17 avr. 2020 01:23
Status : Hors ligne

Re: enregistrer login et mot de passe dans un fichier à part

#11

Message par Nine »

Bon, au moins tu as fait un certain effort, j'apprécie. Voilà, j'ai corrigé ton programme et maintenant il fonctionne :

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Crypt.au3>
#include <File.au3>
#include <Constants.au3>

Opt("MustDeclareVars", 1)

Global $sCryptKey = "MyPassWord"
Global $sFileName = "Test.bin"

Local $aLogin [0][3]
If FileExists($sFileName) Then _ArrayAdd($aLogin, Decrypt_File($sFileName, $sCryptKey))
_ArrayDisplay ($aLogin)

Global $Form1 = GUICreate("Form1", 357, 294, 192, 124)
Global $Label3 = GUICtrlCreateLabel("Enregistrez vos identifiants", 56, 32, 252, 49)
Global $Label4 = GUICtrlCreateLabel("Sélectionnez le programme", 48, 88, 120, 40)
Global $Combo1 = GUICtrlCreateCombo("", 144, 88, 145, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "programme1|MAIL|programme3|programme4|programme5") ;nom mis dans la picklist
Global $Label1 = GUICtrlCreateLabel("Login :", 48, 136, 76, 17)
Global $Input1 = GUICtrlCreateInput("", 144, 128, 121, 21) ; input login
Global $Label2 = GUICtrlCreateLabel("Password :", 48, 168, 76, 17)
Global $Input2 = GUICtrlCreateInput("", 144, 160, 121, 21) ; input password
Global $Button1 = GUICtrlCreateButton("Valider", 152, 208, 75, 25)
Global $Button2 = GUICtrlCreateButton("Annuler", 240, 208, 75, 25)

GUISetState(@SW_SHOW)

Local $sProgram, $sLogin, $sPassword, $nMsg

While 1
  $nMsg = GUIGetMsg()
  Switch $nMsg
    Case $GUI_EVENT_CLOSE
      ExitLoop
    Case $Button1
      $sProgram = GUICtrlRead ($Combo1)
      $sLogin = GUICtrlRead ($input1)
      $sPassword = GUICtrlRead ($input2)
      If $sLogin = "" or $sPassword = "" then ContinueLoop MsgBox ($MB_SYSTEMMODAL,"Erreur","Tous les champs doivent être remplis")
      ; ici tu vas devoir ecrire et faire appel à une fonction pour vérifier l'existence du programme dans la liste
      AjoutLogin ($sProgram, $sLogin, $sPassword)
      MsgBox ($MB_SYSTEMMODAL,"C'est fait!", "Vos données ont été enregistrées avec succès")
      ContinueCase
    Case $Button2
      GUICtrlSetData ($input1, "")
      GUICtrlSetData ($input2, "")
  EndSwitch
WEnd
If UBound ($aLogin) > 0 Then Encrypt_File($sFileName, $sCryptKey, _ArrayToString ($aLogin))

Func AjoutLogin ($sProgram, $sLogin, $sPassword)
  Local $iIdx = UBound($aLogin)
  ReDim $aLogin[$iIdx+1][UBound($aLogin,2)]
  $aLogin[$iIdx][0] = $sProgram
  $aLogin[$iIdx][1] = $sLogin
  $aLogin[$iIdx][2] = $sPassword
EndFunc

Func Decrypt_File($FileName, $vCryptKey)
  Local $hFile, $vContent, $sCrypt

  $hFile = FileOpen($FileName, $FO_BINARY)
  $vContent = FileRead($hFile)
  FileClose($hFile)
  Local $sCrypt = _Crypt_DecryptData($vContent, $vCryptKey, $CALG_RC2, True)
  If @error Then Return ConsoleWrite("Error Decrypting " & $FileName & " with error " & @error & @CRLF)
  Local $sValue = BinaryToString($sCrypt)
  Return $sValue
EndFunc   ;==>Decrypt_File

Func Encrypt_File($FileName, $vCryptKey, $sFileContent)
  Local $hFile, $sCrypt

  $sCrypt = _Crypt_EncryptData($sFileContent, $vCryptKey, $CALG_RC2, True)
  If @error Then Return ConsoleWrite("Error Encrypting " & $FileName & " with error " & @error & @CRLF)
  $hFile = FileOpen($sFileName, $FO_OVERWRITE + $FO_BINARY)
  FileWrite($hFile, $sCrypt)
  FileClose($hFile)
EndFunc   ;==>Encrypt_File
Comme indiqué dans le programme, je t'ai laissé une fonction à écrire (c'est ton homeword). Tu peux la combiner avec AjoutLogin si tu veux, et elle doit vérifier si le programme existe déjà dans la liste, et si oui, remplacé les données login/pw.

magique
Niveau 4
Niveau 4
Messages : 61
Enregistré le : lun. 09 août 2010 11:28
Status : Hors ligne

Re: enregistrer login et mot de passe dans un fichier à part

#12

Message par magique »

c'est logique d'essayer quand on veux comprendre, je doit avouer comme je ne comprend pas bcp le code j'ai vraiment du mal pour le mettre en place alors j'essaye avec la logique dsl je suis null

je vais analyser tout ça à tête reposée

lorsque je lance le script il ouvre une fenetre avec un tableau c'est pour pouvoir retrouver les login et mot de passe ?

merci pour tout ce que tu fait pour moi, je reviens vers toi avec ce que j'aurai fait, je veux m'en sortir, il faut que j'y arrive

après il faudra restituer les login et mot de passe au bon endroit pour que tout fonctionne, ca sera encore une autre paire de manche mais je suis motivé ^^

Avatar du membre
Nine
Niveau 2
Niveau 2
Messages : 22
Enregistré le : ven. 17 avr. 2020 01:23
Status : Hors ligne

Re: enregistrer login et mot de passe dans un fichier à part

#13

Message par Nine »

lorsque je lance le script il ouvre une fenetre avec un tableau c'est pour pouvoir retrouver les login et mot de passe ?
C'est une façon simple de vérifier le contenu du fichier binaire, voir si tout est correct. Lorsque le programme sera complété tu pourras enlever cette ligne. Elle ne sert qu'à debugger le programme au cas où une erreur s'y glisserait.

magique
Niveau 4
Niveau 4
Messages : 61
Enregistré le : lun. 09 août 2010 11:28
Status : Hors ligne

Re: enregistrer login et mot de passe dans un fichier à part

#14

Message par magique »

tu es génial tu pense vraiment à tout
merci en tout cas pour ton aide

magique
Niveau 4
Niveau 4
Messages : 61
Enregistré le : lun. 09 août 2010 11:28
Status : Hors ligne

Re: enregistrer login et mot de passe dans un fichier à part

#15

Message par magique »

Bonjour Nine,

J'essaye de trouver la bonne fonction à utiliser et j'hésite entre
GUICtrlGetHandle
GUICtrlRead
GUICtrlGetState

aurais-tu un indice pour m'aider à moins que je sois complètement à coté

magique
Niveau 4
Niveau 4
Messages : 61
Enregistré le : lun. 09 août 2010 11:28
Status : Hors ligne

Re: enregistrer login et mot de passe dans un fichier à part

#16

Message par magique »

je viens de voir que lorsque je rentre un login et mot de passe pour le programme 1, par la suite je met un autre mot de passe pour le même programme il ajoute une ligne avec le nouveau ce qui risque de créer un conflit enfin je crois, par contre je n'ai aucune idée, comment résoudre ce souci de doublon

magique
Niveau 4
Niveau 4
Messages : 61
Enregistré le : lun. 09 août 2010 11:28
Status : Hors ligne

Re: enregistrer login et mot de passe dans un fichier à part

#17

Message par magique »

Bonjour,

Je pense que je suis sur la bonne voix, mais je pense qu'il me manque un petit quelque chose pour y arriver mais je ne vois pas quoi
j'ai essayer 2 manière différente (j'ai laisser le 2 ème en commentaire dans le code au cas ou je pourrais l'utiliser par la suite
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Crypt.au3>
#include <File.au3>
#include <Constants.au3>
#include <Array.au3>

Opt("MustDeclareVars", 1)

Global $sCryptKey = "MyPassWord"
Global $sFileName = "Test.bin"

Local $aLogin [0][3]
If FileExists($sFileName) Then _ArrayAdd($aLogin, Decrypt_File($sFileName, $sCryptKey))
_ArrayDisplay ($aLogin)

Global $Form1 = GUICreate("Form1", 357, 294, 192, 124)
Global $Label3 = GUICtrlCreateLabel("Enregistrez vos identifiants", 56, 32, 252, 49)
Global $Label4 = GUICtrlCreateLabel("Sélectionnez le programme", 48, 88, 120, 40)
Global $Combo1 = GUICtrlCreateCombo("", 144, 88, 145, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "programme1|MAIL|programme3|programme4|programme5") ;nom mis dans la picklist
Global $Label1 = GUICtrlCreateLabel("Login :", 48, 136, 76, 17)
Global $Input1 = GUICtrlCreateInput("", 144, 128, 121, 21) ; input login
Global $Label2 = GUICtrlCreateLabel("Password :", 48, 168, 76, 17)
Global $Input2 = GUICtrlCreateInput("", 144, 160, 121, 21) ; input password
Global $Button1 = GUICtrlCreateButton("Valider", 152, 208, 75, 25)
Global $Button2 = GUICtrlCreateButton("Annuler", 240, 208, 75, 25)

GUISetState(@SW_SHOW)

Local $sProgram, $sLogin, $sPassword, $nMsg

While 1
  $nMsg = GUIGetMsg()
  Switch $nMsg
    Case $GUI_EVENT_CLOSE
      ExitLoop
    Case $Button1
      $sProgram = GUICtrlRead ($Combo1)
      $sLogin = GUICtrlRead ($input1)
      $sPassword = GUICtrlRead ($input2)
      If $sLogin = "" or $sPassword = "" then ContinueLoop MsgBox ($MB_SYSTEMMODAL,"Erreur","Tous les champs doivent être remplis")

     Local $aArrayUnique = _ArrayUnique($sProgram) ; Utilise les paramètres par défaut pour créer un tableau sans doublon.

    ;$aArrayUnique = _ArrayUnique($sProgram, 1) ; Crée un tableau sans doublon à partir de la deuxième colonne.


     ; ici tu vas devoir ecrire et faire appel à une fonction pour vérifier l'existence du programme dans la liste
      AjoutLogin ($sProgram, $sLogin, $sPassword)
      MsgBox ($MB_SYSTEMMODAL,"C'est fait!", "Vos données ont été enregistrées avec succès")
      ContinueCase
    Case $Button2
      GUICtrlSetData ($input1, "")
      GUICtrlSetData ($input2, "")
  EndSwitch
WEnd
If UBound ($aLogin) > 0 Then Encrypt_File($sFileName, $sCryptKey, _ArrayToString ($aLogin))

Func AjoutLogin ($sProgram, $sLogin, $sPassword)
  Local $iIdx = UBound($aLogin)
  ReDim $aLogin[$iIdx+1][UBound($aLogin,2)]
  $aLogin[$iIdx][0] = $sProgram
  $aLogin[$iIdx][1] = $sLogin
  $aLogin[$iIdx][2] = $sPassword
EndFunc

Func Decrypt_File($FileName, $vCryptKey)
  Local $hFile, $vContent, $sCrypt

  $hFile = FileOpen($FileName, $FO_BINARY)
  $vContent = FileRead($hFile)
  FileClose($hFile)
  Local $sCrypt = _Crypt_DecryptData($vContent, $vCryptKey, $CALG_RC2, True)
  If @error Then Return ConsoleWrite("Error Decrypting " & $FileName & " with error " & @error & @CRLF)
  Local $sValue = BinaryToString($sCrypt)
  Return $sValue
EndFunc   ;==>Decrypt_File

Func Encrypt_File($FileName, $vCryptKey, $sFileContent)
  Local $hFile, $sCrypt

  $sCrypt = _Crypt_EncryptData($sFileContent, $vCryptKey, $CALG_RC2, True)
  If @error Then Return ConsoleWrite("Error Encrypting " & $FileName & " with error " & @error & @CRLF)
  $hFile = FileOpen($sFileName, $FO_OVERWRITE + $FO_BINARY)
  FileWrite($hFile, $sCrypt)
  FileClose($hFile)
EndFunc   ;==>Encrypt_File
est-ce que j'arriverai à un résultat un jour ? :cry: :|
merci de votre aide

Avatar du membre
walkson
Modérateur
Modérateur
Messages : 786
Enregistré le : ven. 12 août 2011 19:49
Localisation : Essonne
Status : Hors ligne

Re: enregistrer login et mot de passe dans un fichier à part

#18

Message par walkson »

Bonjour,
Il faut être logique avec ce que l'on fait !
$sProgram = GUICtrlRead ($Combo1) permet de lire le combo et remplir la variable $sProgram
_ArrayUnique($sProgram) un array est un tableau composé de lignes et de colonnes et vous voulez transformer une variable en tableau ?
Si vous voulez réussir, il vous faudra un minimum de base comme distinguer les variables et les arrays et bien d'autres choses
Local $Ma variable = 1 ceci est une variable
Local $MyArray[4] ceci est un tableau de 4 lignes avec une colonne (une dimension)
$MyArray[0] = 8 j'entre dans la première ligne la valeur 8 etc, etc...
votre code aurait du être _ArrayUnique ($aLogin) car le seul array du code est $aLogin
Concernant _ArrayUnique vous avez raison, il supprime les doublons mais le problème est de savoir qui est le bon entre les deux données ?!?
Je vous propose un approche plus fine en recherchant dans le tableau le doublon. Si le doublon est trouvé, soit on annule l'opération, soit on utilise les nouvelles données que l'on appliquent à ce doublon (on modifie le double trouvé du tableau sans créer un doublon, CAD modification des données)

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Crypt.au3>
#include <File.au3>
#include <Constants.au3>

Opt("MustDeclareVars", 1)

Global $sCryptKey = "MyPassWord"
Global $sFileName = "Test.bin"

Local $aLogin [0][3]
If FileExists($sFileName) Then _ArrayAdd($aLogin, Decrypt_File($sFileName, $sCryptKey))
_ArrayDisplay ($aLogin)

Global $Form1 = GUICreate("Form1", 357, 294, 192, 124)
Global $Label3 = GUICtrlCreateLabel("Enregistrez vos identifiants", 56, 32, 252, 49)
Global $Label4 = GUICtrlCreateLabel("Sélectionnez le programme", 48, 88, 120, 40)
Global $Combo1 = GUICtrlCreateCombo("", 144, 88, 145, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "programme1|MAIL|programme3|programme4|programme5") ;nom mis dans la picklist
Global $Label1 = GUICtrlCreateLabel("Login :", 48, 136, 76, 17)
Global $Input1 = GUICtrlCreateInput("", 144, 128, 121, 21) ; input login
Global $Label2 = GUICtrlCreateLabel("Password :", 48, 168, 76, 17)
Global $Input2 = GUICtrlCreateInput("", 144, 160, 121, 21) ; input password
Global $Button1 = GUICtrlCreateButton("Valider", 152, 208, 75, 25)
Global $Button2 = GUICtrlCreateButton("Annuler", 240, 208, 75, 25)

GUISetState(@SW_SHOW)

Local $sProgram, $sLogin, $sPassword, $nMsg, $sSearch, $rep

While 1
  $nMsg = GUIGetMsg()
  Switch $nMsg
    Case $GUI_EVENT_CLOSE
      ExitLoop
	  Case $Button1
      $sProgram = GUICtrlRead ($Combo1)
      $sLogin = GUICtrlRead ($input1)
      $sPassword = GUICtrlRead ($input2)
      If $sLogin = "" or $sPassword = "" then ContinueLoop MsgBox ($MB_SYSTEMMODAL,"Erreur","Tous les champs doivent être remplis")
	  $sSearch = _ArraySearch($aLogin,$sLogin,0,0,0,1,1,1);on cherche le doublon
	  If $sSearch >= 0 then ;si doublon trouvé on modifie ou non l'original selon le doublon (permet de modifier les entrées)
		  $rep = MsgBox(4 + 48,"ATTENTION", $sLogin & " a été trouvé dans le tableau" & @CRLF & "Voulez vous modifier les données")
		  If $rep = 6 Then ;réponse oui
			  $aLogin[$sSearch][0] = $sProgram
			  $aLogin[$sSearch][2] = $sPassword
		  EndIf
      Else
			AjoutLogin ($sProgram, $sLogin, $sPassword)
	  EndIf
      MsgBox ($MB_SYSTEMMODAL,"C'est fait!", "Vos données ont été enregistrées avec succès",1)
	  _ArrayDisplay ($aLogin); pour voir
      ContinueCase
    Case $Button2
      GUICtrlSetData ($input1, "")
      GUICtrlSetData ($input2, "")
  EndSwitch
WEnd
If UBound ($aLogin) > 0 Then Encrypt_File($sFileName, $sCryptKey, _ArrayToString ($aLogin))

Func AjoutLogin ($sProgram, $sLogin, $sPassword)
  Local $iIdx = UBound($aLogin)
  ReDim $aLogin[$iIdx+1][UBound($aLogin,2)]
  $aLogin[$iIdx][0] = $sProgram
  $aLogin[$iIdx][1] = $sLogin
  $aLogin[$iIdx][2] = $sPassword
EndFunc

Func Decrypt_File($FileName, $vCryptKey)
  Local $hFile, $vContent, $sCrypt

  $hFile = FileOpen($FileName, $FO_BINARY)
  $vContent = FileRead($hFile)
  FileClose($hFile)
  Local $sCrypt = _Crypt_DecryptData($vContent, $vCryptKey, $CALG_RC2, True)
  If @error Then Return ConsoleWrite("Error Decrypting " & $FileName & " with error " & @error & @CRLF)
  Local $sValue = BinaryToString($sCrypt)
  Return $sValue
EndFunc   ;==>Decrypt_File

Func Encrypt_File($FileName, $vCryptKey, $sFileContent)
  Local $hFile, $sCrypt

  $sCrypt = _Crypt_EncryptData($sFileContent, $vCryptKey, $CALG_RC2, True)
  If @error Then Return ConsoleWrite("Error Encrypting " & $FileName & " with error " & @error & @CRLF)
  $hFile = FileOpen($sFileName, $FO_OVERWRITE + $FO_BINARY)
  FileWrite($hFile, $sCrypt)
  FileClose($hFile)
EndFunc   ;==>Encrypt_File
J'aime à penser qu'avant de construire une cathédrale, il faut savoir construire une cabane. Et dites vous que nous avons tous été débutant un jour...
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)

magique
Niveau 4
Niveau 4
Messages : 61
Enregistré le : lun. 09 août 2010 11:28
Status : Hors ligne

Re: enregistrer login et mot de passe dans un fichier à part

#19

Message par magique »

Bonjour walkson,

Merci beaucoup pour la correction du code et tes explications(tu ne te rend pas compte a quel point ça m'aide pour comprendre le code et pouvoir l'utiliser au mieux), je doit avouer qu'en programmation c'est ma bête noir (un formateur m'a dégoutter de la programmation sniff pour moi) je doit faire de gros effort pour arriver a comprendre mais j'y arrive jusqu’à un certain point
en gros j'ai la logique de programmation mais pas les connaissance ni la direction pour chercher

les seule chose que j'ai fait avant dans autoit c'est de lancer des page ou le codage est rester en dur dedans, je n'ai jamais fait dans le dynamique, c'est pour ça que j'étais perdu, un tout grand merci pour l'aide apporter dans cette partie de code à toi et à nine

maintenant j'attaque la suite ^^

par contre je cherche depuis un moment la ligne de code qui permet d'afficher le tableau avec les login et mot de passe mais je l'ai toujours pas trouver sniff

magique
Niveau 4
Niveau 4
Messages : 61
Enregistré le : lun. 09 août 2010 11:28
Status : Hors ligne

Re: enregistrer login et mot de passe dans un fichier à part

#20

Message par magique »

ça y est j'ai trouver pour la ligne de code qui affiche le tableau (les 2)

Répondre