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

C Discussion :

[C, C++] Verifier l'integrité d'un TXT grace à une valeur dans la base de registre


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 21
    Points : 12
    Points
    12
    Par défaut [C, C++] Verifier l'integrité d'un TXT grace à une valeur dans la base de registre
    Bonjour.

    J'ai besoin de securiser, dans le cadre d'un projet, des fichiers texte.
    C'est fichier ne doivent etre modifiés QUE par le programme.

    Pour eviter que quelqu'un bidouille le fichier avec un editeur, je vais le coder (ce sera facile, puisque que le but est de rendre le contenue illisible si on l'ouvre avec un editeur, et non de le rendre indecryptable par un pro de la crypto, un simple XOR, par exemple, suffira donc).

    Mais je voudrais aussi que le programme puisse verifier que le fichier n'a pas été modifier (par exemple que quelqu'un ne l'a pas ouvert dans un editeur, et à tout effacé).

    Pour ça j'ai pensé à faire une espece d'operation mathematique sur le contenue du fichier (un peu comme un CRC, par exemple), et à en copier le resultat dans la base de registre.

    Ainsi, si on edit manuelment le fichier, le "CRC" ne correspond plus, et le programme sait qu'il à été modifié.

    Le probleme c'est que je ne sait pas du tout comment mettre ça en place, je n'y connait rien en crypto...

    Alors si quelqu'un peu m'aiguiler, me mettre sur la voie, ou si quelqu'un connaitrait une sorte de tuto... bah Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    Bonjour,

    des exemples:

    http://en.wikipedia.org/wiki/Fletcher%27s_checksum

    http://en.wikipedia.org/wiki/Adler-32

    tu peux trouver d'autres types de checksum sur wikipedia.

  3. #3
    Membre actif Avatar de lun4t1k
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    276
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 276
    Points : 274
    Points
    274
    Par défaut
    Sinon, si tu ne veux pas une méthode de cryptage High tech, stocke la date du création du fichier dans le registre, et si la date du fichier a été modifiée, c'est que le fichier a été modifié!


  4. #4
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    En general le checksum est stoqué directement dans le fichier (dans un eventuel en tete), pas à l'exterieur du fichier

    Un moyen plus simple serait aussi de zipper avec mot de passe

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    + Résolu !
    Avec les liens externe en bas des pages Wiki j'ai reussit à trouver pleinde truc qui devraient pouvoir faire mon bonheur.

    Je posterai le code que j'utilise, une fois que ça marchera. Peut etre que sa servira à d'autres...

    Surtout que je cherchait un truc de quelque ligne, vraiment simple, car c'est vraiment pas un point important du projet...

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    sans aller jusqu'à un checksum, tu as plus simple et standard en C, si ce qui t'intéresse est de savoir si ça a été modifié.

    Avec la fonction stat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include	<sys/stat.h>
     
    struct	stat	sbuf;
     
     
    stat("x",&sbuf);
    struct stat :

    Data type Component name Meaning


    mode_t st_mode
    File mode, i.e. access rights and file type
    ino_t st_ino
    Inode number
    dev_t st_dev
    ID of device containing a directory entry for this file
    dev_t st_rdev
    ID of device This entry is defined only for char special or block special files
    nlink_t st_nlink
    Number of links
    uid_t st_uid
    User ID of the file's owner
    gid_t st_gid
    Group ID of the file's group
    off_t st_size
    File size in bytes
    time_t st_atime
    Time of last access
    time_t st_mtime
    Time of last data modification
    time_t st_ctime
    Time of last file status change
    long st_blksize
    Preferred I/O block size
    long st_blocks
    Number of 512 byte blocks allocated

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    stat ne te permet pas de savoir si ton fichier a réellement été modifié.
    Il te permet de savoir si ton fichier a été réécrit.

    Le checksum permet de savoir, avec une plus ou moins forte probabilité selon l'algorythme, si le fichier a été modifié.

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    OK, mais le PO avait dit :

    Citation Envoyé par Xav987
    Mais je voudrais aussi que le programme puisse verifier que le fichier n'a pas été modifier (par exemple que quelqu'un ne l'a pas ouvert dans un editeur, et à tout effacé).

    ...

    Ainsi, si on edit manuelment le fichier, le "CRC" ne correspond plus, et le programme sait qu'il à été modifié.

    ....


    Et déjà avec stat tu as la date de modif et la taille.

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par souviron34
    sans aller jusqu'à un checksum, tu as plus simple et standard en C,
    Pas à ma connaissance.
    si ce qui t'intéresse est de savoir si ça a été modifié.

    Avec la fonction stat :
    N'est pas standard C. POSIX.1, oui, mais pas C.

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par josse95
    Le checksum permet de savoir, avec une plus ou moins forte probabilité selon l'algorythme, si le fichier a été modifié.
    Un checksum, non. Trop faible. Un CRC-16, par exemple, oui (ou MD5...).

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Pas à ma connaissance.

    N'est pas standard C. POSIX.1, oui, mais pas C.
    Ah bon ? OK je savais pas... merci

    Mais là encore (la pratique...) ça a toujours marché pour moi sur Solaris, HPUX, Irix, et Linux...

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    Emmanuel, relis bien mon message:

    avec une plus ou moins forte probabilité
    Je n'ai pas dit que la conservation du checksum garantit qu'un fichier n'a pas été modifié. J'ai parlé de probabilité de détection de modification.

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par josse95
    Emmanuel, relis bien mon message:

    Je n'ai pas dit que la conservation du checksum garantit qu'un fichier n'a pas été modifié. J'ai parlé de probabilité de détection de modification.
    Et j'ai bien précisé qu'avec un checksum, la détection était faible...

  14. #14
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par souviron34
    Ah bon ? OK je savais pas... merci

    Mais là encore (la pratique...) ça a toujours marché pour moi sur Solaris, HPUX, Irix, et Linux...
    Ben oui, mais ça n'empêche pas de vérifier la rubrique 'portabilité' (ou conformité) du man...

    http://man.developpez.com/man2/stat.2.php

    CONFORMITÉ
    Les appels stat et fstat sont conformes aux versions SVr4, POSIX, X/OPEN, BSD 4.3. L'appel lstat est conforme aux versions BSD 4.3 et SVr4. SVr4 mentionne des conditions d'erreurs supplémentaires pour fstat EINTR, ENOLINK, et EOVERFLOW. Pour stat et lstat SVr4 indique les conditions supplémentaires EACCES, EINTR, EMULTIHOP, ENOLINK, et EOVERLOW. L'utilisation des champs st_blocks et st_blksize risque d'être moins portable. Ils ont été introduit dans BSD, et ne sont pas mentionnée dans POSIX. Leur interprétation change suivant les systèmes, voire sur un même système s'il y a des montages NFS.
    Posix ne décrit pas les bits S_IFMT, S_IFSOCK, S_IFLNK, S_IFREG, S_IFBLK, S_IFDIR, S_IFCHR, S_IFIFO, S_ISVTX, mais réclame d'utiliser les macros S_ISDIR(), etc. Les macros S_ISLKNK et S_ISSOCK ne se trouvent pas dans POSI.1-1996 mais seront présentes dans le prochain standard POSIX. La première vient de SVID 4v2, la seconde de SUSv2.
    Unix V7 (et les systèmes suivants) propose S_IREAD, S_IWRITE, S_IEXEC, là où POSIX préfère leurs synonymes S_IRUSR, S_IWUSR, S_IXUSR.

  15. #15
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    OK Emmanuel, mais donc si j'en crois ce lien, utiliser stat pour déterminer uniquement taille et date du dernier accès ou de la dernière modif est portable.....

    Voir aussi "Single Unix specification" http://www.opengroup.org/onlinepubs/...sysstat.h.html

    The following are declared as functions and may also be defined as macros. Function prototypes must be provided for use with an ISO C compiler.
    et

    http://sourceware.org/ml/glibc-cvs/2.../msg00100.html

  16. #16
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par souviron34
    OK Emmanuel, mais donc si j'en crois ce lien, utiliser stat pour déterminer uniquement taille et date du dernier accès ou de la dernière modif est portable.....
    C'est portable sur les plateformes conformes à POSIX.1, oui. Win32 n'est pas réputé pour son haut degré de compatibilité avec POSIX.1. MinGW comble quelques lacunes, mais pas tout...

  17. #17
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par souviron34
    OK Emmanuel, mais donc si j'en crois ce lien, utiliser stat pour déterminer uniquement taille et date du dernier accès ou de la dernière modif est portable...
    La portabilite est une notion relative. Si tu te limites a Posix, Emmanuel vise generalement beaucoup plus large et toute implementation conforme de C. Entre les deux, on peut aussi vouloir utiliser Windows sans une couche comme Cygwin, Uwin ou Interix. Personellement, quand je me sens vicieux je sors une implementation de C pour PDP-10 qui a l'art de mettre a mal pas mal d'hypotheses.

  18. #18
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    OK on apprends tous les jours...

    Citation Envoyé par Jean-Marc.Bourguet
    Personellement, quand je me sens vicieux je sors une implementation de C pour PDP-10 qui a l'art de mettre a mal pas mal d'hypotheses.


    Je n'ai plus accès depuis bien longtemps à ça.. J'avais un vieux PDP 11/73 (64K mémoire 64k data), mais à l'époque pour moi c'était Fortran et assembleur....

  19. #19
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Personellement, quand je me sens vicieux je sors une implementation de C pour PDP-10 qui a l'art de mettre a mal pas mal d'hypotheses.
    Oui, ou un bon vieux BC++ 3.1 (16-bit mode réel modèle large) avec lequel j'écrivais du code portable pour machines 68k et PowerPC (32-bit, 'à l'envers') ...

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 376
    Points
    376
    Par défaut
    Pourquoi cette obsession de la portabilité ?

    La portabilité peut faire partie du cahier des charges d'un logiciel. Mais elle n'est pas une nécessité en soit.

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

Discussions similaires

  1. modification d'une valeur dans un fichier txt
    Par oliv27400 dans le forum MATLAB
    Réponses: 5
    Dernier message: 05/12/2011, 20h07
  2. recherche d'une valeur dans un txt
    Par oliv27400 dans le forum MATLAB
    Réponses: 4
    Dernier message: 04/08/2010, 10h30
  3. Chercher une valeur dans un fichier.txt
    Par Medoou dans le forum MATLAB
    Réponses: 19
    Dernier message: 28/07/2009, 13h42
  4. Recherche d'une valeur dans un txt depuis vba excel
    Par Ted37 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 13/08/2008, 08h28
  5. récupérer une valeur dans un fichier .txt ?
    Par _n1n1_ dans le forum VB.NET
    Réponses: 5
    Dernier message: 27/04/2007, 19h19

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