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 :

Création programme de cryptage


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 13
    Points : 2
    Points
    2
    Par défaut Création programme de cryptage
    Bonjour à tous,

    Je suis un étudiant en dernière année secondaire et j'ai décidé de produire un programme de cryptage pour mon travail de fin d'étude.
    J'ai suivi un cours de programmation en C pour avoir de bonnes bases mais le problème est que je ne sais pas du tout comment m'y prendre pour démarrer ce programme. Mon professeur guide ne m'aide vraiment pas et la présentation est pour bientôt... Je ne sais pas si quelqu'un serait d'accord de m'aider mais je vais tout de même vous soumettre mon idée:
    Je souhaiterais faire un programme de cryptage où je demanderais à l'utilisateur de rentrer la phrase à crypter de la manière suivante. Tous les doublons de cette phrase (ou ce texte) seraient supprimés, ensuite toutes les lettres seraient reclassées dans l'ordre alphabétique. Je suis conscient que ce forum n'existe pas pour que quelqu'un fasse mon travail mais me permette d'avancer et de m'aider dans ce travail. J'ai pas mal de notion mais je ne les ai jamais misent en pratique, d'où l'introduction de cette discussion.

    Voici déjà le peut que j'ai été capable de produire pour l'instant:
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    static void nett(char *mdp) //fonction pour virer le \0 a la fin qui gene
    {
        char *p = strchr(mdp, '\n');
     
        if (p)
        {
            *p = 0;
        }
    }
     
    int main(int argc, char *argv[])
    {
     
    char phD[100];
     
    printf("Bonjour, veuillez rentrer la phrase a crypter:\n");
    fgets(phD,sizeof phD,stdin); // fget("%s", phraseDepart);
    nett(phD);
    printf("Votre phrase est: %s\n",phD);
     
    return 0;
    }
    En vous remerciant pour votre compréhension et aide,
    TomelD98.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    C'est déjà un bon début, tu as une saisie correctement sécurisée. Même si pour celle-ci, il te manque encore de "finir de lire la ligne" tapée au clavier, sinon elle dépassera dans ta saisie suivante:
    Code C : 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
    static void nett(char *mdp) //fonction pour virer le \n a la fin qui gene
    {
    	char *p = strchr(mdp, '\n');
     
    	if (p)
    	{
    		*p = 0;
    	}
    	else
    	{
    		//Si pas trouvé dans la chaîne, c'est qu'il est encore dans stdin
    		int c;
    		while((c=getchar())!=EOF && c!='\n')
    		{ }
    	}
    }

    Pour la suite, il faut procéder par étapes:

    L'étape suivante, c'est la suppression des doublons et le tri des lettres par ordre alphabétique.
    Tu constateras rapidement, d'ailleurs, qu'il est plus facile de faire ça dans l'autre ordre! Car une fois triées, les lettre en double seront toutes rassemblées, facilitant leur suppression (il suffira de ne copier une lettre vers sa destination que si elle diffère de la précédente).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 13
    Points : 2
    Points
    2
    Par défaut Création programme cryptage
    D'accord, mais comment est-ce que je fais ça ? Parce que je connais les différentes fonctions et tout mais je n'arrive pas à les mettre en pratique... Je sais que toutes les lettres que je tape ont une adresse (qui correspond à un nombre). Pour les remettre dans l'ordre alphabétique je dois lui demander de classer ces nombres dans l'ordre croissant. Pour les doublons je dois demander à l'ordinateur de supprimer les nombre qui revienne plusieurs fois mais alors comment je peux faire ça informatiquement parlant ?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    L'algorithme de suppression de doublons dans une liste triée, s'il n'est pas fait "sur place", est trivial: Il suffit de copier vers un autre buffer, en vérifiant à chaque fois si la valeur actuelle est identique à la précédente.

    Pour le tri, et bien... Il existe de nombreux algorithmes de tri. Cela doit facilement se trouver sur internet, ne serait-ce que wikipédia.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Je ne sais pas si ceci est correct:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (i=26;i>0;i--)
    	{
       	k=rand()%i;
          table_code[i-1]=alphabet[k];
          for (j=k;j<i;j++)
          	alphabet[j]=alphabet[j+1];
    Cet algorithme trie les lettres dans l'ordre et supprime les doublons si je ne me trompe pas... J'ai vraiment du mal à trouver...

  6. #6
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Je ne comprends pas comment tu comptes décrypter le message. Lorsque tu auras terminé ton traitement l'information sera perdue, non ?

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par TomelD98 Voir le message
    Je ne sais pas si ceci est correct:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (i=26;i>0;i--)
    	{
       	k=rand()%i;
          table_code[i-1]=alphabet[k];
          for (j=k;j<i;j++)
          	alphabet[j]=alphabet[j+1];
    Cet algorithme trie les lettres dans l'ordre et supprime les doublons si je ne me trompe pas... J'ai vraiment du mal à trouver...
    Ceci n'est pas un algorithme de tri, bien au contraire: il fait un mélange aléatoire!
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Effectivement ce n'est absolument pas ce qu'il me faut... Mais je ne comprend pas comment je peux faire ça en code... J'ai juste la théorie et c'est tout. C'est un peu embarassant

  9. #9
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Est-ce que ton système fonctionne déjà sur le papier ?

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    C'est à dire ? Tout ce que je sais c'est que le programme dois trier les lettres de ma phrase\mon texte dans l'ordre alphabétique et qu'ensuite je dois lui demander de supprimer les doublons. C'est comparer a chaque fois les valeurs de chaque lettre (leur adresse donc) et les mettre dans l'ordre mais mon soucis c'est que je sais en français ce que je dois faire mais le retraduire en code ben je bloque sévèrement... Je n'ai jamais fais d'exercices sur la comparaison de valeurs et tout donc voilà... En gros je ne connais que certaines fonctions de base (comme printf, scanf) ainsi que les boucles de base (for, while, if...). Il faut savoir que je ne suis qu'un parfait débutant qui n'a jamais fais de pratique...

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    C'est quoi le résultat de ton programme sur ce message?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    Eh bien en gros, tout ce que j'ai c'est ceci:
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    static void nett(char *mdp) //fonction pour virer le \0 a la fin qui gene
    {
        char *p = strchr(mdp, '\n');
     
        if (p)
        {
            *p = 0;
        }
    }
     
    int main(int argc, char *argv[])
    {
     
    char phD[100];
     
    printf("Bonjour, veuillez rentrer la phrase a crypter:\n");
    fgets(phD,sizeof phD,stdin); // fget("%s", phraseDepart);
    nett(phD);
    printf("Votre phrase est: %s\n",phD);
     
    for(phD )
     
     
    return 0;
    }
    Il faut savoir que la fonction fgets ne vient pas de moi ni le prototype de la fonction qui supprime le \0 à la fin du tableau... C'est mon professeur guide qui m'a dit d'utiliser ça alors que je suis sûr que je n'ai jamais vu cette fonction dans mon cours...

  14. #14
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Je pense que ce qu'on cherche tous à savoir, c'est ce que tu attends de ton programme en entrée et en sortie. Tu as un cas d'utilisation, un exemple ?

  15. #15
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    D'accord j'ai compris, je vous donne un exemple:
    En fait, je souhaite créer un programme de cryptage et expliquer les étapes pour le concevoir et le présenter lors de mon oral. Du coup le programme fonctionnerait de la manière suivante:
    Je rentre la phrase suivante:"Je m'appelle Barry".
    Le programme devra trier toutes les lettres dans l'ordre alphabétique et supprimer les doublons de sorte que mon message "secret" soit incompréhensible pour quelqu'un d'autre. Après le professeur qui me guide à pensé remettre les lettres dans un autre ordre mais il me le demandera seulement lorsque je lui aurai montrer comment trier les lettres dans l'ordre alphabétique et supprimer les doublons...
    Mon but est de présenter comment on code un programme de cryptage et l'utiliser devant eux pour leur montrer le résultat à la fin.

  16. #16
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Donc, quel est la phrase produite par le programme si je lui donne "Rien n'est impossible."
    Et la question suivante sera: comment as-tu déterminé cette réponse?

    Prenons le problème par le début:

    comment tries-tu...
    • ab
    • ba
    • aba
    • aba
    • ababbaaba
    • abc
    • cab
    • Rien
    • AaaA
    • Rien n'est impossible.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  17. #17
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Ok, donc je te repose la question : comment comptes-tu déchiffrer le message ?

    Si j'ai bien compris la procédure que tu as en tête, je vois pas comment récupérer l'information d'origine. Ce n'est pas du chiffrement, c'est du hachage.

  18. #18
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    @leternel: La phrase produite serait donc: BEILMNOPRST. J'ai déterminé cette réponse en classant toutes les lettres dans l'ordre alphabétique et j'ai supprimer les doublons.
    @Matt_Houston: Eh bien... C'est une très bonne réponse puisque je ne sais pas y répondre... Vous avez raison je ne saurais pas récupérer l'information d'origine. C'est quoi le hachage alors ?

  19. #19
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Le hachage (hashing) constiste à calculer un nombre caractéristique du texte.
    Une bonne formule de hash possède la propriété que deux textes peu différents produisent des nombres très différents.
    Deux textes sont forcément différents s'ils n'ont pas le même hash.

    Un tel algorithme est le MD5. On peut aussi parler de CRC.

    Et contrairement au chiffrage, ce n'est pas une opération réversible.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  20. #20
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 13
    Points : 2
    Points
    2
    Par défaut
    D'accord, donc il faut croire que mon professeur cherche simplement à me faire faire un simple programme de cryptage sans décryptage alors... Donc comment est-ce que je pourrais le retraduire en code ?

Discussions similaires

  1. besoin de conseil création programme (débutante)
    Par kwakly dans le forum WinDev
    Réponses: 1
    Dernier message: 16/05/2007, 13h19
  2. Programme de cryptage
    Par IDE dans le forum C
    Réponses: 3
    Dernier message: 06/05/2007, 20h58
  3. Création programme gestion
    Par Klaad dans le forum Windows
    Réponses: 4
    Dernier message: 19/10/2006, 19h54
  4. programme de cryptage
    Par hamadibensassi dans le forum C
    Réponses: 14
    Dernier message: 01/06/2006, 20h30

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