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,
// 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