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 :

Protéger fichier.txt? Autre possibilité?


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 52
    Points : 40
    Points
    40
    Par défaut Protéger fichier.txt? Autre possibilité?
    Bonjour à tous,

    Est il possible de proteger la visualisation d'un fichier texte,.txt, pour que ca visualition soit rendu possible qu avec un mot de passe ou par un autre moyen sécurisé? Si ,oui , comment est il possible de faire a car je ne sais pas du tout?
    Je m esplique: J ai un programme qui enregistre des edits.text dans un fichier texte. Je voudrais que seul des personnes autorisé puis ce regardé dans le fichier .txt et qu il ne soit donc pas visible par tous comme il y est maintenant? Dans ce programme, j ai déja mis un mot de passe sur la visualistation de ce fichier .txt dans un tableau de données.
    Sinon , comment puis je protéger mes données dans le fichier .txt pour qu il ne soit visible par personne mise à part lorsque ma petite application est en route et qu il l affiche dans un tableau?
    Dois je utiliser les fichiers ini ou d autres choses? Si oui , est ce que quelqu un pourrait me donner un lien pour que j étudie cela car je ne connais que les enregistrements sur fichiers .txt.

    Merci d avance à vous tous.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Mmmh mettre un mot de passe à un fichier texte je ne pense pas que ce soit possible, éventuellement au répertoire qui le contient (je crois) mais sinon il faudrait gérer des droits d'accès suivant le profil de l'utilisateur connecté à la machine mais là c'est plus du domaine du réseau et si tu veux gérer ça en prog. je pense que ça va être compliqué...
    Evidemment cette dernière solution ne tient pas si plusieurs personnes peuvent venir sur la machine avec la même session.
    Le plus simple je pense serait de crypter le contenu du fichier ainsi un humain standard ne pourra pas visualiser le contenu avec un simple éditeur, il faudra qu'il passe par ton programme (protégé par un mot de passe par contre) qui saura décrypter le fichier et l'afficher. Si tu n'as pas besoin d'une grosse couche de sécurité, tu peux opter pour le très simple algorithme de décalage. Algorithme qui consiste à "décaler" chaque lettre par une valeur fixe (exemple avec un décalage de 5, A devient F, B devient G, etc... Une petite astuce si tu fais un Ord( 'a' ), tu obtient le numéro de la lettre 'a' dans la table ASCII.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  3. #3
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    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 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    bonjour,

    déjà, tu n'es pas obligé de l'appeler machin.txt : si tu le nommes machin.aze, il sera lisible dans notepad, mais rien n'indique que cette extension "masque" un fichier texte.

    ensuite, tu peux aussi crypter le contenu ; il existe plein de solutions, de la plus simple (cryptage xor) à la plus sûre (RSA...), selon le besoin de confidentialité souhaité

    cryptage xor (réversible) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    StringClef:='clef de cryptage/décryptage';
    l:=Length(StringClef);
    for i:=1 to Length(S) do 
    begin
      j:=i mod l;
      if j=0 then j:=l; 
      S[i]:=Chr( Ord( S[i]) xor Ord( StringClef[j]) );
    end;
    Delphi 5 Pro - Delphi 11.3 Alexandria 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 !

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par Aka Guymelef Voir le message
    Le plus simple je pense serait de crypter le contenu du fichier ainsi un humain standard ne pourra pas visualiser le contenu avec un simple éditeur, il faudra qu'il passe par ton programme (protégé par un mot de passe par contre) qui saura décrypter le fichier et l'afficher.
    Je suis d'accord avec Aka Guymelef, si tu n'as pas besoin d'un super-niveau de sécurité, cette approche est surement la plus simple à mettre en place.

    J'avais en tête de stocker tes fichiers sur disque en utilisant la librairie ZLib fournit avec Delphi. Tes fichiers ainsi stockés seront compressés et illisibles depuis NotePad.

    Ensuite depuis ton appli tu ouvres ton fichier, le décompresse à la volée et le stocke dans un Memo via un TMemoryStream.

    Je dois avoir un exemple d'utilisation de la ZLib qui traine.

    @+ Claudius

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 52
    Points : 40
    Points
    40
    Par défaut
    Merci pour vos réponses,

    Ta dernière idée Cl@udius ,en stockant les fichiers sur disque en utilisant la librairie ZLib fournit avec Delphi,me parait tres bien mais je ne sais pas du tout comment cela fonctionne , à qu elle moment l utiliser et compresser le fichier.txt, ou trouver Zlib.
    Je pense que c est la plus simple idée vu que si j utilise un cryptage, je ne pourrait pas utiliser le fichier dans mon programme, pour faire des calculs par exemple. Je pourrais le décrypter lorque j utilise mon 'logiciel' et le crypter lorque j en sortirai , mais il sera toujours visible au moment de l utilisation du petit programme.
    Je ne suis qu un simple debutant . Est ce que vous pourriez m expliquer tout celà ? Ou me donner un lien qui explique ca bien?
    Y a t il un autre moyen simple pour que je puisse utiliser mon fichier texte dans mon programme et que son contenu ne soit pas visible ou qu il demande un mot de passe?

    Merci d avance.

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re,

    L'utilisation de ZLib n'est pas très compliquée.
    Voici un exemple Compression/Decompression de fichier:

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    uses
      ZLib;
     
    function CompressFile(const SrcFile, DestFile: string): Boolean;
    var
      Zip: TCompressionStream;
      Src: TFileStream;
      Dest: TFileStream;
    begin
      Result := True;
      Src := TFileStream.Create(SrcFile, fmOpenRead);
      Dest := TFileStream.Create(DestFile, fmCreate);
      Zip := TCompressionStream.Create(clMax, Dest);
      try
        try
          Zip.CopyFrom(Src, Src.Size);
        finally
          FreeAndNil(Zip);
          FreeAndNil(Src);
          FreeAndNil(Dest);
        end;
      except
        Result := False;
      end;
    end;
     
    procedure DecompressFile(const SrcZipFile, DestFile: string);
    var
      Zip: TDecompressionStream;
      Src, Dest: TFileStream;
      Buffer: array [0..4095] of Byte;
      Size: Integer;
    begin
      Src := TFileStream.Create(SrcZipFile, fmOpenread);
      Zip := TDecompressionStream.Create(Src);
      Dest := TFileStream.Create(DestFile, fmCreate);
     
      try
        Size := 4096;
        while Size > 0 do
        begin
          Size := Zip.Read(Buffer[0], 4096);
          if Size > 0 then
            Dest.Write(Buffer[0], Size);
        end;
      finally
        FreeAndNil(Zip);
        FreeAndNil(Src);
        FreeAndNil(Dest);
      end;
    end;
    Tu fournis simplement le chemin complet des fichiers source et destination, et les fonctions créent le fichier.

    Je te prépare un autre exemple en travaillant sur un MemoryStream pour alimenter/sauvegarder le contenu d'un memo par exemple.

    @+ Claudius

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 52
    Points : 40
    Points
    40
    Par défaut
    Merci beaucoup pour ce code.

    Mon programme enregistre des edits dans un fichier texte en appuyant à chaque fois sur un boutton en ayant auparavant damander à l'utilisateur un nom de fichier pour toutes ces valeurs.J utilise ce fichier texte dans plusieurs fiches pour faire des moyennes par exemple.
    Ou dois je placer la compression et la decompression?Je place la compression apres création du fichier puis juste avant d entrer les valeurs je fais une decompression puis lorsque j ai finis d entrer les valeurs je fais une compression?
    C est ca?

    Merci .

  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re,

    Ces 2 fonctions compresse/décompresse des fichiers (quelque soit leurs natures).

    Dans le cas présents tu disposes de fichiers textes, que tu ne souhaites pas laisser visibles pour tout le monde.
    Donc au lieu de stocker tes .txt lisibles depuis NotePad, tu vas les compresser. Pour ce faire tu utilises CompressFile.

    Exemple de compression:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      CompressFile('C:\MesFichiers\MonFichier.txt', 'C:\MesFichiers\MonFichier.zlib');
    Le fichier 'zlib' est créé sur le disque.
    L'extension 'zlib' étant un exemple tu les nommes comme tu veux.

    La décompression fonctionne sur le même principe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      DecompressFile('C:\MesFichiers\MonFichier.zlib', 'C:\MesFichiers\MonFichier.txt');
    Là c'est le fichier txt qui est créé.

    Maintenant dans ton application, à l'ouverture tu sélectionnes et décompresses ton fichier 'zlib' ce qui créé ton fichier texte. Tu manipules ce fichier. A la fin tu re-compresses le fichier, et tu supprimes le fichier texte avant de quitter.
    Seuls les fichiers compressés persistent sur le disque.

    Voilà. Pas très compliqué.

    @+ Claudius

  9. #9
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 52
    Points : 40
    Points
    40
    Par défaut
    merci beaucoup.
    C est à ma portée.
    Bonne journée à vous et merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Copier le contenu d'un fichier .TXT dans un autre
    Par Rogeur dans le forum Tcl/Tk
    Réponses: 7
    Dernier message: 06/04/2009, 17h24
  2. Réponses: 43
    Dernier message: 04/04/2007, 12h49
  3. Réponses: 5
    Dernier message: 29/03/2007, 13h09
  4. Indexer un fichier txt dans un autre fichier txt
    Par dimitri1233 dans le forum Langage
    Réponses: 1
    Dernier message: 22/12/2006, 16h06
  5. comment remplacer un caractere par un autre dans un fichier txt
    Par uzumaki_naruto dans le forum Langage
    Réponses: 6
    Dernier message: 24/07/2006, 13h33

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