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 :

RSA : problème déchiffrement


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 1
    Par défaut RSA : problème déchiffrement
    Bonjour,

    je suis en train de réaliser en C une application qui chiffre et déchiffre en RSA (avec de petites clés).

    Je me base sur les fonctions de chiffrement/déchiffrement standards, et j'utilise l'exponentiation modulaire pour le calcul.
    Je vérifie les résultats produits avec CrypTool.

    Si dans un sens =>chiffrement ça fonctionne à merveille, dans l'autre, j'obtiens soit 1 (je boucle une fois de moins), soit des nombres énormes (je boucle le bon nombre de fois) plutôt que des entiers compris entre 0 et 255 comme prévu.
    Pourtant, à priori, le code pour le chiffrement et le déchiffrement est exactement le même...

    Voici la portion de code envisagée:
    cmessage[] contient les données chiffrées,
    message[] contient les données déchiffrées,
    cm[] et m[] sont destinés à contenir le chiffrement de message[] et le déchiffrement de cmessage[] respectivement,

    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
    // Albuquerque
    long long cmessage[20]={912673,1331000,1061208,32768,1771561,1000000,1442897,1030301,1061208,1259712,1771561,1685159,1157625,912673,1643032,1560896,1815848,1259712,32768,912673};
    long long message[20]={97,110,102,32,121,100,113,101,102,108,121,119,105,97,118,116,122,108,32,97};
    long long cm[20]={0};
    long long m[20]={0};
     
    // Chiffrement de message => identique à cmessage donc OK
    int tempe=0;
    for(i=0;i<20;i++)
    {
    cm[i]=1;
    for(tempe=0;tempe<e;tempe++)
    {
    cm[i]=(message[i]*cm[i])%n;
    }
    printf("%lld ",cm[i]);
    }
    printf("\n");
     
    // Déchiffrement de cmessage => ICI SE SITUE MON PROBLEME... chaque printf renvoie 1; si je boucle un tour de moins, j'obtiens un nombre énorme
    int tempd=0;
    for(i=0;i<20;i++)
    {
    m[i]=1;
    for(tempd=0;tempd<d;tempd++)
    {
    m[i]=(cmessage[i]*m[i])%n;
    }
    printf("%\n\t%lld\n",m[i]);system("PAUSE");
    }
    Merci d'avance pour vos lumières,
    P.

    Configuration: Windows Vista
    Firefox 3.5.5

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Par défaut
    Salut,
    un problème lors du calcul de ta second clée ?

    Sinon si tu veux utiliser des plus grand nombre tu peux utiliser la librairie GMP.

  3. #3
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Ayant fait un cryptage par RSA, je j'etait confronté aux problemes de depassement de capacité des type d'entiers.
    J'avais donc utiliser des double (et redefinie l'operateur %).

    Dans ton cas, si tu manipule des nombres qui risque de depasser la capacité d'un double, je te conseille comme cité ci dessus la bibliotheque GMP qui repondra a tes besoins.

    Maintenant, juste un petit truc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int tempd=0;
    for(i=0;i<20;i++)
    {
        m[i]=1;
        for(tempd=0;tempd<d;tempd++)
            m[i]=(cmessage[i]*m[i])%n;
    
        printf("%\n\t%lld\n",m[i]);system("PAUSE");
    }
    Je ne sais pas si une operation se deroule a ton insu, enleve le premier % pour voir.

Discussions similaires

  1. RSA problème déchiffrement
    Par el_heinze dans le forum C
    Réponses: 0
    Dernier message: 22/06/2009, 12h13
  2. RSA problème déchiffrement
    Par el_heinze dans le forum Linux
    Réponses: 0
    Dernier message: 22/06/2009, 10h34
  3. Problème déchiffrement X.509
    Par GuiomNantes dans le forum Sécurité
    Réponses: 5
    Dernier message: 14/04/2009, 15h59
  4. RSA-probléme de décryptage
    Par mahis_ dans le forum C#
    Réponses: 3
    Dernier message: 23/03/2008, 19h35
  5. [RSA] problème avec CipherOutputStream
    Par LaseLiep dans le forum Sécurité
    Réponses: 4
    Dernier message: 16/10/2007, 15h50

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