IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Mot de passe avec étoile dans fichier "ini".


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut Mot de passe avec étoile dans fichier "ini".
    Bonjour à toutes et à tous,

    Mes meilleurs vœux 2018.

    J'ai un champ de type password avec étoile lorsque l'on tape le mot de passe, est t'il possible de retrouver dans le fichier "ini", le mot de passe avec étoile au lieu du texte ?

    Peut être un cryptage mais comme je pense toujours compliqué !

    Merci d'avance au cas ou....

    @+,

    cincap

  2. #2
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 381
    Points : 2 995
    Points
    2 995
    Par défaut
    un fichier ini étant un format texte, je vois mal comment y inclure des étoiles qui pourraient être utilisées comme mot de passe.
    il suffit coder le texte concerné, ça fera bien l'affaire non ??

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    @ Papy214, merci pour ta réponse.

    J'utilise la propriété Passwordchar du Tmaskedit et je pensais que lorsque le fichier ini se créait, les étoiles seraient créées aussi car si j'écris moi même les étoiles dans le fichier ini, c'est possible.

    Je continue mon test.

    @+,

    cincap

  4. #4
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 381
    Points : 2 995
    Points
    2 995
    Par défaut
    TMaskEdit gère ça à la saisie et stocke un caractère pour chaque étoile affichée.
    Il ne fait rien de plus.

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 844
    Points : 11 274
    Points
    11 274
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Il est d'usage de ne pas stocker de mot de passe auquel comparer celui saisi, mais un hash de celui-ci et de lui comparer le même hash du mot de passe saisi.
    On peut utiliser différentes méthodes de hash, pour peu qu'elles soient suffisamment complexes : md5, sha-1, AES, etc., en y ajoutant éventuellement un sel.
    Delphi 5 Pro - Delphi 10.4 Rio Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    @ tourlourou, merci de ton conseil je vais trouver une autre solution pour que le mot de passe ne soit pas créé dans le fichier ini comme c'est pour l'utilisation d'une caméra.

    Merci à tous,

    Je ferme ce topic comme la seule solution serait le hash.

    @+,

    cincap

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    Bonjour à toutes et à tous,

    Je reviens vers vous car a force de chipoter, avec ces deux fonctions j'arrive à coder et a décoder le mot de pass mais pas à l'intégrer dans mon fichier Ini.

    Pour la sauvegarde dans le fichier Ini c'est Ok, le mot de passe est bien crypté mais au démarrage je retrouve le mot de passe crypté dans le champ password.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    function CryptString(const S, Pwd: string): string;
    var 
    I, J: Integer; 
    sPassword: string; 
    begin 
    Result := ''; 
    sPassword := Pwd; 
     
    J := 1; 
    for I := 1 to Length(S) do 
    begin 
    Result := Result + IntToHex(Ord(S[I]) xor Ord(sPassword[J]), 2); 
    Inc(J); 
    if J > Length(sPassword) then J := 1; 
    end; 
    end; 
     
    function DecryptString( const S, Pwd: string): string; 
    var 
    I, J: Integer; 
    sPassword: string; 
    begin 
    Result := ''; 
    sPassword := Pwd; 
     
    J := 1; 
    I := 1; 
    repeat 
    Result := Result + Chr(StrToInt('$' + Copy(S, I, 2)) xor 
    Ord(sPassword[J])); 
    Inc(I, 2); 
    Inc(J); 
    if J > Length(sPassword) then J := 1; 
    until I > Length(S);
    end;
    Utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     
    sCrypt := CryptString(Edpass.text, 'PWD');
     
    showmessage('Pwd ' + sCrypt);
     
    label1.Caption := DecryptString(sCrypt, 'PWD');
    Mon fichier Ini :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
     
    sCrypt := CryptString(Edpass.text, 'PWD');
     
    FichierIni := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
     
    //Fichierini.WriteString('PWD', 'Videoparlophone',edpass.text); //Sans cryptage
     
    Fichierini.Writestring('Pwd', 'Videoparlophone', sCrypt); //Avec cryptage
     
    FichierIni.Free;
     
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     
    FichierIni := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
     
    EDpass.Text:= FichierIni.ReadString('PWD', 'Videoparlophone', ''); //Sans cryptage
     
    //EDpass.Text:= FichierIni.ReadString(sCrypt, 'PWD', 'Videoparlophone');
     
    fichierini.Free;
     
    end;
    Merci pour une solution éventuelle !

    @+,

    cincap

  8. #8
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    A première vue, tu ne décryptes pas ton mot de passe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EDpass.Text:= DecryptString(FichierIni.ReadString('PWD', 'Videoparlophone', ''));
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  9. #9
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 339
    Points : 3 107
    Points
    3 107
    Par défaut
    Bonjour,
    est ce que ce n'est pas normal ? après lecture dans le fichier ini, il faut le décrypter avant de l'afficher dans EdPass.

    A+
    Charly

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    @ Linkin, merci pour ta suggestion, l'erreur indique "pas assez de paramètres" alors qu'ils sont tous présent.

    @ Charly910, merci pour ta suggestion et je suis logiquement de ton avis, faut t'il alors décrypter dans un Tedit non visible et ensuite de copier le résultat dans le champ du password ?

    Je vais voir.

    @+,

    cincap

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    @ tous,

    Avec ceci cela fonctionne mais il y a un hic !

    J'utilise un 2ième Tedit ou se charge le mot de passe codé et ensuite je le décode dans le 1er Teditmask.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     
    FichierIni := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
     
    EDpass2.Text:= FichierIni.ReadString('PWD', 'Videoparlophone', '');
     
    fichierini.Free;
     
    Edpass.Text := DecryptString(edpass2.text, 'PWD');
     
    end;
    Mais cela fonctionne dès que un premier mot de passe est sauvé dans le fichier Ini car sans l'existance d'un fichier Ini l'application plante au 1er démarrage ce qui me parait logique.

    @+,

    cincap

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    @ tous,

    Avec ceci je n'ai plus d'exception :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     
    If FileExists(ChangeFileExt(Application.ExeName, '.ini')) then begin
     
    FichierIni := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
     
    EDpass2.Text:= FichierIni.ReadString('PWD', 'Videoparlophone', ''); //Avec cryptage
     
    fichierini.Free;
     
    Edpass.Text := DecryptString(edpass2.text, 'PWD') //Mot de passe avec les *
     
    end
     
    else beep; //Ou un showmessage !
     
    end;
    Merci pour votre aide, il y a peut être encore plus simple mais comme c'est pour un usage personnel..

    @+,

    cincap

  13. #13
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 339
    Points : 3 107
    Points
    3 107
    Par défaut
    Bonjour,
    tu peux aussi lire le mot de passe crypté dans une variable String auxiliaire, puis la décrypter en l'affectant à EdPass.text dans ta boite de dialogue du Password

    Mais cela doit revenir au même du moment que EdPass n'est pas visible au mont de la lecture du fichier ini.

    ce que je ne comprends pas c'est pourquoi tu l'affiches dans EdPass ? normalement l'utilisateur entre son password dans EdPass et tu dois le comparer à celui du fichier ini décrypté ?

    A+
    Charly

  14. #14
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    @ Charly910,

    ce que je ne comprends pas c'est pourquoi tu l'affiches dans EdPass ? normalement l'utilisateur entre son password dans EdPass et tu dois le comparer à celui du fichier ini décrypté ?
    En fait l'application affiche la vue que filme mon videoparlophone et pour ce faire il faut un username, l'Ip, le port et le mot de passe (définit dans les réglages du videoparlophone).

    Donc il faut que Edpass.text affiche entres autres le bon mot de passe au démarrage de l'application sinon pas de vue.

    Dans ce cas, dans le fichier Ini, ce mot de passe n'est visible que codé et au démarrage il s'affiche avec le bon mot de passe sous forme du caractère "*".

    @+,

    cincap

  15. #15
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    Bonjour à toutes et à tous,

    J'ai simplifié la solution en éliminant le 2ième Tedit qui servait de décodage.

    Je ne garde donc que le TEditMask (Edpass.text) !

    Cela donne ceci et fonctionne aussi bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     
    If not FileExists(ChangeFileExt(Application.ExeName, '.ini')) then beep else begin
     
    FichierIni := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
     
    EDpass.Text:= FichierIni.ReadString('PWD', 'Videoparlophone', '');
     
    fichierini.Free;
     
    Edpass.Text := DecryptString(edpass.text, 'PWD');
     
    end;
    end;
    Le mot de passe s'affiche avec le caractère * sur l'application et dans le fichier Ini il est codé.

    @+,

    cincap

  16. #16
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    je ne comprend pas le besoin de tester l'existence du fichier .ini

    je simplifierai en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.FormCreate(Sender: TObject);
    var RCPwd : String; // pour vérifier l'existence d'un mot de passe 
    begin
     
    FichierIni := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
    try 
      RCPwd:=FichierIni.ReadString('PWD', 'Videoparlophone', '');
      if RCPwd:='' then Beep
      else EDpass.Text:= DecryptSttring(RCPwd,'PWD');
    finally 
     fichierini.Free;
    end;  
     
    end;
    Mais surtout, j'éviterai de mettre le fichier ini dans le répertoire de l'application. Avec les windows "modernes" il vaut mieux le mettre dans %appdata% ou dans un repertoire de ce dernier
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  17. #17
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 381
    Points : 2 995
    Points
    2 995
    Par défaut
    Perso, ce qui m'étonne c'est le concept de logiciel personnel avec la volonté de crypter le mot de passe dans un ini pour le mettre directement dans la zone de saisie au lancement du programme.

    ça me parait un peu contradictoire.

  18. #18
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 339
    Points : 3 107
    Points
    3 107
    Par défaut
    bonjour,

    j'avoue que je n'ai toujours pas compris non plus. Mais peut être que l'on veut que celui qui n'a pas le fichier ini ne puisse pas se servir du logiciel ?

    Normalement, à l'ouverture du logiciel on entre le mot de passe et le logiciel teste s'il est correct ? (après cryptage, il doit être identique à celui crypté dans le fichier ini si on veut pouvoir le modifier, ou crypté en dur s'il ne change jamais)

    A+
    Charly

  19. #19
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    @ tous,

    On s'écarte de la question de mon topic il me semble.

    Pour utiliser mon videoparlophone, je dois avoir une application pour Gsm soit systeme Android ou Apple.

    J'ai donc réalisé une petite application qui me permet de voir le devant de mes barrières depuis mon PC.

    Pour ce faire, je dois rentrer des données (le port, l'Ip, l'user, le mot de passe) et les sauvegardées dans un fichier Ini pour ne pas a devoir les rentrer chaque fois.

    Ce qui me gênait c'était l'accès au fichier Ini ou le mot de passe était relaté en clair, d'ou chercher la façon de le crypter et de le décrypter.

    Cette façon me convient et pourra servir à tous pour d'autres applications il me semble.

    @+,

    cincap
    Images attachées Images attachées  

  20. #20
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 420
    Points : 1 325
    Points
    1 325
    Par défaut
    Bonjour à toutes et à tous,

    @ SergioMaster, j'ai quand même testé ta suggestion avec deux petites corrections sur la retranscription sur le site et cela fonctionne aussi correctement.

    Tester si le fichier Ini existe valait pour tous les champs de données et je ne pense pas que le code était alourdi.

    Maintenant, plusieurs utilisateurs utilisent mon Pc et pourraient copier les données du VidéoParlophone pour se connecter de l'extérieur d'où le désir de coder le mot de passe le plus simple possible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    procedure TForm1.FormCreate(Sender: TObject);
    var RCPwd : String; // pour vérifier l'existence d'un mot de passe 
    begin
     
    FichierIni := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
    try 
      RCPwd :=FichierIni.ReadString('PWD', 'Videoparlophone', '');
     
      if RCPwd ='' then Beep                       //Enlever les deux points devant RCPwd
      else EDpass.Text:= DecryptString(RCPwd,'PWD');//Enlever le 2ième t de string
     
    finally 
     fichierini.Free;
    end;  
     
    end;
    L'autre suggestion était aussi de sauvegarder le fichier Ini dans un autre dossier ou dans le registre en créant une clé spécifique mais pour cette application pas très utile.

    @+,

    cincap

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. UserForm mot de passe avec cryptage dans la base de registre
    Par lmc38 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/11/2012, 21h18
  2. UserForm mot de passe avec cryptage dans la base de registre
    Par fred65200 dans le forum Contribuez
    Réponses: 1
    Dernier message: 24/01/2010, 23h56
  3. Réponses: 5
    Dernier message: 23/01/2009, 22h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo