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 :

Problème avec l'algorithme d'Euclide étendu


Sujet :

C++

  1. #1
    Invité
    Invité(e)
    Par défaut Problème avec l'algorithme d'Euclide étendu
    Salut, j'essaye de chiffrer et déchiffrer des message, mais je rencontre un gros soucis.

    Le problème vient de cette fonction :

    Code cpp : 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
     
    BigInt BigInt::m_invert(const BigInt& b) const
        {
            BigInt n0 = b;
            BigInt b0 = *this;
            BigInt t0 (0, true, base);
            BigInt t (1, true, base);
            BigInt q = n0/b0;
            BigInt r = n0 - (q * b0);
            BigInt temp = 0;
            while (r > 0)
            {
                temp = t0 - (q * t);
                if (temp >= 0)
                    temp = temp % b;
                else
                    temp = b - ((temp) % b);
                t0 = t;
                t = temp;
                n0 = b0;
                b0 = r;
                q = n0/b0;
                r = n0 - (q * b0);
            }
            if (b0 != 1)
                return 0;
            else
                return t;
        }

    J'ai testé tout mes fonctions *, /, %, modOfPow, etc..., et elles fonctionnent bien, cependant, je n'obtiens pas le même caractère après déchiffrement :

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    BigInt p (503, true, 16);
                BigInt q (563, true, 16);
                n = p * q;
                BigInt f = (p - 1) * (q - 1);
                while (d == 0) {
                    do {
                        e = BigInt::genRandom(32, 16);
                    } while (BigInt::pgcd(e,f) != 1 && BigInt::pgcd(e, n) != 1);
                    d = e.m_invert(f);
                }
                BigInt ascii (5, true, 16);
                BigInt c = ascii.modOfPow(e, n);
                std::cout<<c.modOfPow(d, n)<<std::endl;

    J'en déduis donc que c'est la fonction m_invert qui me renvoie des mauvaises valeur pour d.

    Mais je ne comprend pas pourquoi, j'ai pourtant bien recopier l'algorithme.

    Merci d'avance pour votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Autant pour moi, j'avais oublié un - à la ligne 17 devant le temp :

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    temp = b - ((-temp) % b);

    Résolu!

    J'ai repris un code en fait trouvé sur un forum et le type avait aussi oublié le -.

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

Discussions similaires

  1. Problème avec package algorithmic et algorithm
    Par ibma4 dans le forum Mise en forme
    Réponses: 1
    Dernier message: 19/12/2009, 07h53
  2. Algorithme d'euclide étendu
    Par eldiablo7 dans le forum Scheme
    Réponses: 1
    Dernier message: 25/10/2009, 10h11
  3. Petit problème avec l'algorithme de Dijkstra
    Par Raiden1234 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 28/11/2008, 16h22
  4. Probléme avec l'algorithme negamax
    Par akkinaj dans le forum Débuter
    Réponses: 1
    Dernier message: 25/06/2008, 02h02
  5. problème avec un ALGORITHME
    Par ulysse031 dans le forum Mathématiques
    Réponses: 4
    Dernier message: 17/02/2007, 15h59

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