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 :

fichier chiffré et récupération de sa clé


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    profession liberale
    Inscrit en
    Avril 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : profession liberale

    Informations forums :
    Inscription : Avril 2014
    Messages : 22
    Points : 9
    Points
    9
    Par défaut fichier chiffré et récupération de sa clé
    bonjour,

    j'ai écrit un petit programme de permutation afin de "crypter" un texte

    pour cela j'ai fais un petit prog qui me demande de taper mon texte et l'enregistre dans un tableau de char

    ensuite une fonction qui permute les caractères du message de façon aléatoire (pour rendre le texte illisible)

    j'enregistre en même temps la "clé de cryptage" qui me sert plus tard au "decryptage"

    j'arrive le faire dans un même programme mais

    j'aimerai le scinder afin d'avoir un programme de cryptage et un pour le decryptage

    pour cela j'enregistre le texte crypté dans un fichier et la clé dans un autre et souhaite que le programme de décryptage puisse récupérer la clé pour décrypt...

    voici mon problème : je sais récupérer le texte mais comment récupérer la clé (tableau de int) ???

    si je l'enregistre dans un fichier txt, le problème c'est que la clé est constituée de chiffre et de nombre (par ex : 1, 20,... ce qui n'est pas pareil que 120 ou 12, 0... ou 1, 2, 0...), j'espère vous faire comprendre ce que je veux dire, il faut que je puisse lire et remettre les bonnes valeurs dans un tableau, quel formatage de la clé dois je utiliser ???

    merci pour vos précieuses informations

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Si les nombres de ta clef ne dépassent pas la valeur 255 tu peux très bien l'enregistrer comme une suite de caractères. C'est à dire un fichier de char.
    Ainsi, si on prend par exemple la clef 65 66 67 tu retrouveras dans ton fichier le texte ABC. À la lecture de ton fichier une lecture caractère par caractère te permettra de récupérer la valeur numérique de chaque lettre et ainsi retrouver 65 66 67.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    profession liberale
    Inscrit en
    Avril 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : profession liberale

    Informations forums :
    Inscription : Avril 2014
    Messages : 22
    Points : 9
    Points
    9
    Par défaut merci
    eh bien je dois avouer ne pas y avoir penser, effectivement... cependant je crains fort que mes textes ne contiennent plus que 255 caractères...

    il me faudrait donc une autre approche

    merci tout de même...

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Je ne suis pas sûr que tu m'es compris.

    Tu peux avoir une clef de x nombres y. si y € [0,255] alors tu peux utiliser un fichier texte. Si par contre y peut être > 255 alors effectivement la méthode n'est pas bonne.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    profession liberale
    Inscrit en
    Avril 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : profession liberale

    Informations forums :
    Inscription : Avril 2014
    Messages : 22
    Points : 9
    Points
    9
    Par défaut
    je t'ai bien compris mais mon prog de cryptage fonctionne par permutation donc chaque lettre à une valeur qui lui est propre donc au delà de 255 caractères la clé sera 256...et...

  6. #6
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Au temps pour moi . Je comprends ta clef est aussi longue que le fichier traité. C'est bien ca ?

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 62
    Points : 162
    Points
    162
    Par défaut
    Bonjour,
    Tu peux ouvrir ton fichier en mode binaire et écrire directement les nombres (int) les uns à la suite des autres.
    L'avantage est que ton fichier sera illisible par un humain.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    profession liberale
    Inscrit en
    Avril 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : profession liberale

    Informations forums :
    Inscription : Avril 2014
    Messages : 22
    Points : 9
    Points
    9
    Par défaut oui c'est bien cela
    Citation Envoyé par gerald3d Voir le message
    Au temps pour moi . Je comprends ta clef est aussi longue que le fichier traité. C'est bien ca ?

  9. #9
    Futur Membre du Club
    Homme Profil pro
    profession liberale
    Inscrit en
    Avril 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : profession liberale

    Informations forums :
    Inscription : Avril 2014
    Messages : 22
    Points : 9
    Points
    9
    Par défaut peux tu me dire comment
    merci pour ta réponse

    comment crées tu le fichier binaire ? : fopen("fichier.o", "a+")
    et comment récupères tu ensuite la clé pour la mettre dans le tableau ?

  10. #10
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Supposons un tableau d'entiers int mon_tab[ 200 ];
    • Tu ouvres ton fichier comme ça pour l'écriture (s'il existe déjà il sera écrasé) : FILE * ecrire = fopen( mon_fichier, "w" ); (sans oublier de vérifier si "ecrire" != NULL),
    • Pour écrire le tableau c'est : fwrite( mon_tab, sizeof( int ), 200, ecrire ) (et vérifier que le retour vaut 200),
    • Pour l'ouverture en lecture, c'est : FILE * lire = fopen( mon_fichier, "r" ); (vérifier aussi la nullité),
    • Et enfin pour lire le fichier directement dans le tableau, c'est : fread( mon_tab, sizeof( int ), 200, mon_fichier ). Le retour de la fonction t'indiquera le nombre d'éléments réellement lus.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  11. #11
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Pas mieux que dinobogan !

    Les fichiers binaires sont faits pour enregistrer des données arbitraires, dans un format qui n'a pas besoin d'être lisible par un humain. fwrite() pour écrire et fread() pour lire, et ton tableau de int passe d'un programme à l'autre

  12. #12
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    Juste pour pinailler, on dit chiffrer, crypter ça n'existe pas
    Déchiffrer est l'opération inverse de chiffrer.

    Décrypter, c'est "déchiffrer mais sans connaître les clés".

  13. #13
    Futur Membre du Club
    Homme Profil pro
    profession liberale
    Inscrit en
    Avril 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : profession liberale

    Informations forums :
    Inscription : Avril 2014
    Messages : 22
    Points : 9
    Points
    9
    Par défaut je crois que je ne maitrise pas fread()
    Citation Envoyé par Bktero Voir le message
    Pas mieux que dinobogan !

    Les fichiers binaires sont faits pour enregistrer des données arbitraires, dans un format qui n'a pas besoin d'être lisible par un humain. fwrite() pour écrire et fread() pour lire, et ton tableau de int passe d'un programme à l'autre
    j'utilise fread() afin de récupérer les valeurs de ma clé pour les remettre dans un tableau que j'utilise enfin pour déchiffrer, mais il ne récupère pas les bonnes données préalablement enregistrées dans le fichier, j'ai fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (i=0;i<nb d éléments de la clé;i++)
    {
        cle[i]=fread(tableau[i], sizeof(tableau)/sizeof(tableau[0], i, fichier_contenant_la_cle);
    }
    le début lu à l'air correct mais ensuite je n'ai que des zéros...

    je sèche...comme souvent....

  14. #14
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 62
    Points : 162
    Points
    162
    Par défaut
    Bonjour,
    cle[i]=fread(tableau[i], sizeof(tableau)/sizeof(tableau[0], i, fichier_contenant_la_cle);
    cle[i] Pourquoi stockes tu le nombre d'éléments lu dans cle ?
    tableau[i] est un élément (int) tu es censé fournir un pointeur vers un buffer donc tableau + i ou [I]&(tableau).
    La variable "tableau" est un pointeur sur la zone mémoire où est stocké ton tableau. sizeof(tableau) te renvoi donc la taille du pointeur, pas la taille du tableau comme tu sembles vouloir le faire. Par contre sizeof(tableau[0]) te donne effectivement la taille d'un élément.
    Je ne vois pas trop ce que vient faire le i après tableau[0]. A mon avis tu n'as pas bien compris le prototype de la fonction. Tu dois spécifier le nombre d'éléments que tu veux lire, pas la position de l'élément. Dans ton cas, tu veux en lire 1.

    Avec cette dernière précision, tu peux constater que ta boucle for n'est pas indispensable. En utilisant bien fread, tu peux lire toutes tes valeurs d'un coup.

    Je t'invite à relire la documentation de fread car il semble que tu n'as pas compris les rôles de tous les arguments.

  15. #15
    Futur Membre du Club
    Homme Profil pro
    profession liberale
    Inscrit en
    Avril 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : profession liberale

    Informations forums :
    Inscription : Avril 2014
    Messages : 22
    Points : 9
    Points
    9
    Par défaut euhhh
    bonjour,

    merci pour ta réponse, en fait je cherche simplement à lire la clé et la remettre dans un tableau, donc je croyais récupérer chaque valeur avec mon i et le mettre dans mon tableau clé

    d'après ce que tu me dis fread ne sert qu' obtenir le nombre d'éléments lus, donc effectivement cela de me sert pas...sauf peut être pour paramétrer la taille du tableau "clé"

    je vais lire ton lien, j'ai lu beaucoup de chose pendant midi sur fread() mais je ne vois pas comment avec les arguments à donner je peux lire ET récupérer la valeur lue pour la mettre à nouveau dans un tableau

    du coup y a t il une autre fonction ?

    en tout cas merci
    j'avance...mais pas vite...

  16. #16
    Futur Membre du Club
    Homme Profil pro
    profession liberale
    Inscrit en
    Avril 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : profession liberale

    Informations forums :
    Inscription : Avril 2014
    Messages : 22
    Points : 9
    Points
    9
    Par défaut test
    je viens de faire un test je vous mets le code afin peut être de mieux cerné ce que je ne comprends pas
    on peut récupérer toutes les valeurs du tableau en 1 passe, juste ?
    si oui pourquoi ce code ne remplit pas le tab2 ???

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main (int argc, char *argv[])
    {
        int tab[10]={1,2,3,4,5,6,7,8,9,10};
        FILE * fichier=fopen("monTab.bin","w");
        if (fichier==NULL)
            exit(0);
        fwrite(tab, sizeof(int), 10, fichier);
        FILE * lecture=fopen("monTab.bin","r");
        if (lecture==NULL)
            exit(0);
        int tab2[10]={0};
        fread(tab2,sizeof(int),10, lecture);
        int i;
        for (i=0;i<10;i++)
        {
            printf("\n%d", tab2[i]);
        }
        close(fichier);
        close(lecture);
    }

  17. #17
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    C'est un problème classique
    La fonction fwrite utilise une structure FILE pour entre autre manipuler un buffer en RAM. Tant que le buffer n'est pas plein, rien n'est écrit sur disque.
    Ici, tu as deux possibilités :
    1. utiliser fflush( fichier ) pour forcer le vidage du buffer sur disque juste après le fwrite
    2. fermer le flux d'écriture avec fclose( fichier ) avant l'ouverture en lecture au lieu de le faire à la fin du programme. Un flush est fait automatiquement avant la fermeture


    Au passage, ce n'est pas close qu'il faut utiliser sur un FILE mais fclose.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  18. #18
    Futur Membre du Club
    Homme Profil pro
    profession liberale
    Inscrit en
    Avril 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : profession liberale

    Informations forums :
    Inscription : Avril 2014
    Messages : 22
    Points : 9
    Points
    9
    Par défaut cool.....
    merciiii....

    en fait j'ai essayé plein de chose, j'ai cru que c'était l'accès aux données qui prenait du temps du coup j'ai rajouté un while pour patienter et permettre l'accès mais non
    ensuite j'ai déplacé le close (fichier) effectivement pour ensuite ouvrir en lecture mais toujours que des 00000....

    et enfin l'erreur comme tu l'as souligné c'est Fclose(fichier)

    maintenant ça marche

    merci

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/02/2011, 14h12
  2. Parcours de fichier .avi et récupération de structures particulières
    Par Gandalf2008 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 16/09/2010, 16h38
  3. transmission fichier chiffré via flux avec socket
    Par Papipen dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 26/06/2009, 17h20
  4. Réponses: 11
    Dernier message: 05/09/2008, 15h54
  5. Réponses: 2
    Dernier message: 01/06/2005, 14h28

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