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

Discussion :

Chiffrement / déchiffrement - nombre de César

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Passioné
    Inscrit en
    Mars 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Passioné

    Informations forums :
    Inscription : Mars 2018
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Chiffrement / déchiffrement - nombre de César
    Bonjour
    .
    Je développe une petite appli pour fournir des énigmes à des collégiens à l'occasion d'un escape-game

    Mon projet est disponible sur github..

    Pour essayer d'être concis :
    • Objectif : fournir à l'utilisateur 1 ou deux fenêtres : la première (optionnelle) permet d'accéder à la seconde grâce à un code pin à 4 chiffre. La seconde propose de déchiffrer une phrase, soit par la méthode du nombre de César, soit par un mélange des lettres dans des blocs successifs.
    • Le programme se décompose en deux parties, un configurateur, et un lecteur.
    • Aujourd'hui je suis concentré sur le développement du configurateur, qui permet de : choisir si oui ou non on devra entrer un code pin au démarrage, si oui de paramétrer ce code. Puis de choisir la méthode de chiffrement, ainsi que la phrase à chiffrer. Et d'inscrire le tout dans un fichier de configuration sur le disque.


    Je rencontre un problème avec la méthode de chiffrage nr1 le nombre de Cesar, ou plutot la méthode de déchiffrage. Voici son code :
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    QString EmFunctions::crypt(bool const &way, const int &arg1, const QString &arg2)
    {
        QString tmpStr(arg2); // Stockage de la phrase à chiffrer dans une variable temporaire
        int decalage(arg1); //Stockage du nombre de lettres à décaler dans la fonction
        //Choix d'utilisation de la fonction way = chiffrement, !way = déchiffrement.
         if(!way)
        decalage -= (2*decalage);
     
     
    /* Traitement de la chaine reçue en argument et passée dans la variable tmpStr
     * - Suppression des espaces et ponctuations.
     * - Remplacement des accents.
     * - Passage en majuscule.
     */
     
        tmpStr.remove(QRegExp("\\W")); //Suppression des ponctuations et symboles
        tmpStr.replace(QRegExp("[éèëêËÊ]"),"e"); // Remplacement des accents
        tmpStr.replace(QRegExp("[àâäÄÂ]"), "a");
        tmpStr.replace(QRegExp("[iïîÏÎ]"), "i");
        tmpStr.replace(QRegExp("[ùüÜûÛ]"), "u");
        tmpStr.replace(QRegExp("[ôöÔÖ]"), "o");
        tmpStr.replace(QRegExp("[ç]"),"c");
        tmpStr = tmpStr.toUpper();
     
    // initialisation de variables temporaires
        QString alphabetString = QObject::tr("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
        int strLenght = tmpStr.size();
        int value;
        int alphabetLenght = alphabetString.size();
     
     
    //traitement du chiffrage avec des QVectors
        QVector<QChar> tmpIn(strLenght);
        QVector<QChar> tmpOut(strLenght);
        QVector<QChar> alphabetVector(alphabetLenght);
        QVector<int> tmpElements(strLenght);
     
    //Tranformation du QSTring tmpStr en QVector
        for (int i(0); i<strLenght; i++)
            tmpIn.insert(i, tmpStr.at(i));
     
    //Transformation de alphabet en QVector
        for(int i(0); i<alphabetLenght ; i++)
            alphabetVector.insert(i, alphabetString.at(i));
     
    //Boucle de décalage. On parcourt la chaine à chiffer et on enregistre une 'value' pour chaque élément
        for (int i(0); i<strLenght; i++)
        {
            for (int j(0); j<alphabetLenght; j++)
            {
                if(tmpIn.at(i) == alphabetVector.at(j))
                {
     
                    value = j + decalage;
     
     
                    if(value >= (alphabetLenght-value))
                        tmpElements.insert(i, (value %alphabetLenght));
                    else
                        tmpElements.insert(i, value);
                }
             }
        }
    //Pour chaque valeur du tableau éléments, on enregistre le caractère correspondant dans tmpOut
        for (int i(0); i<strLenght; i++)
        {
            for(int j(0); j<alphabetLenght; j++)
            {
                if(tmpElements.at(i) == j)
                    tmpOut.insert(i, alphabetVector.at(j));
     
            }
        }
     
    //Conversion du QVector en Qstring
        QString tmpStr2;
        for(int i(0); i<strLenght; i++)
            tmpStr2 += tmpOut.at(i);
     
     
     
        return tmpStr2;
    }
    Le problème que je rencontre est le suivant :
    • Pour un dacalage de 1 à 5 pas de soucis, le chiffrement comme le déchiffrement fonctionnent. Exemple : 'Le chien a l'air d'avoir faim' avec un décalage de 4 se chiffre en PIGLMIREPEMVHEZSMVJEMQ et la fonction de décryptage retourne LECHIENALAIRDAVOIRFAIM... Très bien
    • Mais avec un décalage de 5, le déchiffrement renvoie : LECHIENALAIRDAOIRFAIM
    • Avec un décalage de 10 : LECHIENALAIDOIFAIM
    • Et pour un décalage de 25 la fonction renvoir AAAAA


    Je n'ai peut être pas assez de recul, mais j'ai du mal à voir où j'ai pêché dans mon code... Un coup de main SVP ?

    D'avance merci.
    Fichiers attachés Fichiers attachés

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Passioné
    Inscrit en
    Mars 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Passioné

    Informations forums :
    Inscription : Mars 2018
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Avec l'aide de qDebug j'ai décortiqué ma fonction et je me suis rendu compte que c'est la clé de décalage appellée en déchiffrant qui n'allait pas. Pour les valeurs comprises entre 26 et 26-décalage on enregistrait un nombre négatif dans le vector Elements, et donc la traduction en rapport avec le vector alphabet ne pouvait se faire.

    J'ai donc modifié la ligne 7 ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    decalage = 26 - décalage;
    Et ça fonctionne !

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

Discussions similaires

  1. Chiffrement/déchiffrement très simple
    Par OphyTe dans le forum Sécurité
    Réponses: 4
    Dernier message: 11/12/2014, 00h12
  2. [C#] Chiffrement déchiffrement (RSA)
    Par mybetacompany dans le forum Débuter
    Réponses: 3
    Dernier message: 09/01/2014, 11h58
  3. Exemple de chiffrement-déchiffrement 128 bits
    Par n5Rzn1D9dC dans le forum Contribuez
    Réponses: 1
    Dernier message: 16/11/2013, 19h55
  4. Chiffrement Déchiffrement string
    Par Kexian_ dans le forum Général Python
    Réponses: 11
    Dernier message: 26/04/2012, 02h07
  5. chiffrement/déchiffrement fichier exercice du tutorial
    Par ghaddou dans le forum Débuter
    Réponses: 3
    Dernier message: 01/04/2012, 14h44

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