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 :

Débutant - Utilisation d'une clé aléatoire pour un cryptage-décryptage


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 26
    Par défaut Débutant - Utilisation d'une clé aléatoire pour un cryptage-décryptage
    Bonjour,

    Je suis étudiante en C++ et j'effectue un projet de cryptage-décryptage avec clé aléatoire de 2 à 5 chiffres.

    Mon problème réside dans le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void cryptProcess(char t[], int n[])
    {
     
    cout << "\n\nEcrire le message que vous souhaitez crypter: \n";
    cin >> cryptText;
     
    for (int i=0, j=1; t[i] != '\0'; j++, i++)
    {
     
    		t[i]= t[i] + n[j];
     
    }
    J'arrive bien à crypter les premières lettres correspondant à la longueur de la clé (2 à 5) mais le reste des lettres restent décodées...

    Je ne comprends pas pourquoi...

    En gros voilà ce que doit donner mon code:

    Exemple avec 3 chiffres aléatoires donnés par l'ordi selon la longueur choisie (8, 1, 2)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FRANCE (mot à crypter)
     
    Codage: F+8, R+1, A+2, N+8, C+1, E+2
     
    Mot crypté: NSCVDG
    Je n'obtient que NSCNCE...

    Je ne dois pas utiliser de pointeur car ce n'est pas un chapitre qu'on a encore étudié.
    Merci d'avance pour vos conseils.

    Goozisan

    -----------
    Utilise plutot la balise ( le #) plutot que la balise [COLOR][/COLOR]

  2. #2
    Membre éclairé Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par défaut
    Bah dans ton algo, n[j] est eu dela de ta clé... j'imagine que les cases non remplie par ta clé doivent êtres à 0.

    Peut etre doit tu utiliser un modulo de la longueur de ta clé à cet endroit

  3. #3
    Membre émérite
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Par défaut
    je ne comprends pas bien ton code... tu fais entrer le texte dans cryptText, et tu ne l'utilises pas ensuite... et quel tableau contient la clé ?? tu devrais leur donner des noms plus explicites...

    sinon, t ne dois pas faire ton test sur la longueur de la clé, mais sur la longueur du texte. en gros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    message : message en clair
    crypt : message crypté
    cle : clé
    tailleCle : taille de la clé
    tailleMessage :  taille du message
     
    j=0
    de i=0 a tailleMessage -1
       crypt[i]=message[i]+cle[j]
       j=(j+1) modulo tailleCle
    fin
    en effet, si le message est plus long que la cle on doit reutiliser celle ci (c'est d'ailleurs ce qui fait la faiblesse de ce cryptage).

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,
    Citation Envoyé par jobherzt
    je ne comprends pas bien ton code... tu fais entrer le texte dans cryptText, et tu ne l'utilises pas ensuite... et quel tableau contient la clé ?? tu devrais leur donner des noms plus explicites...

    sinon, t ne dois pas faire ton test sur la longueur de la clé, mais sur la longueur du texte. en gros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    message : message en clair
    crypt : message crypté
    cle : clé
    tailleCle : taille de la clé
    tailleMessage :  taille du message
     
    j=0
    de i=0 a tailleMessage -1
       crypt[i]=message[i]+cle[j]
       j=(j+1) modulo tailleCle
    fin
    en effet, si le message est plus long que la cle on doit reutiliser celle ci.
    +1, et la petite précision: si le message est plus petit que la clé (ca peut arriver, malgré tout ) la clé n'a pas à etre entièrement utilisée
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    C'est un problème d'algorithme pour commencer.
    Est-ce que sur papier tu sais comment ton algo tourne pour que ça marche ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 26
    Par défaut
    Un grand merci à tous pour vos réponses

    Higestromm >> C'est tout à fait ça, les cases non remplies par ma clé sont à zéro. Et utiliser un modulo de la longueur de la clé pourrait en effet m'aider je n'y avais pas pensé...

    jobhertz >> En fait, je n'ai pas publié tout mon code ici. Je réutilise bien cryptText par la suite pour donner le résultat du crytpage. Le tableau qui contient ma clé s'appelle keyCode et est déclaré plus tôt dans le programme dans la fonction suivante:

    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
    void crypt()
    {
    	cout << "\n\nCREER UN MESSAGE CRYPTE\n";
    	cout << "\nVeuillez choisir la longueur de la clef (2-5): ";
     
    	cin >> keySize;                
     
    	cout << "\n\n";
    	switch (keySize)                
    	{	                                            
    	case 2 : random(keyCode, keySize);              // Random fonction utilisée pour l'aléatoire 
    							              // void random (int chiffreAleatoire[], int n)			                    
    	            cryptProcess(cryptText,keyCode);
    	            break;                                 
     
    	case 3 : random(keyCode,keySize);               
    	              cryptProcess(cryptText,keyCode);       
                                break;
     
    	case 4 : random(keyCode,keySize);               
    	              cryptProcess(cryptText,keyCode);       
                                break;
     
    	case 5 : random(keyCode,keySize);               
    	              cryptProcess(cryptText,keyCode);       
                                break;
     
    	default : cin.clear();		                   
    			  while (cin.get() != '\n')   
    				  continue;
     
    			  cout << "\nCette alternative n'existe pas. Merci de reessayer.\n";
    			  crypt ();           
    	}                              
    }
    Voici la partie complète pour cryptProcess:

    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
    void cryptProcess(char t[], int n[])
    {
     
    cout << "\n\nEcrire le message que vous souhaitez crypter: \n";
    cin >> cryptText;
     
    for (int i=0, j=1; t[i] != '\0'; j++, i++)
    {
     
    		t[i]= t[i] + n[j];
     
    }
     
     
    cout << "\n\n\n" << "Votre message crypte: \n"; 
    cout << cryptText;
    Pour la taille du texte, est-ce que string paraît plus approprié? En tout cas, je vais essayer d'adapter mon code à ce que tu as proposé. Je te dirai ce que ça donne

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 02/05/2015, 17h21
  2. Réponses: 14
    Dernier message: 15/05/2006, 16h34
  3. [Débutant]utilisation d'une DLL
    Par Yanos dans le forum Général Java
    Réponses: 9
    Dernier message: 01/03/2006, 13h44
  4. [MySQL] Utilisation d'une itération foreach pour le parcours du résultat
    Par jexl dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/01/2006, 10h27
  5. Réponses: 4
    Dernier message: 08/11/2005, 15h10

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